<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.17"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>refl-cpp: refl::descriptor Namespace Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
  $(document).ready(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">refl-cpp
   </div>
  </td>
   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
        <span class="left">
          <img id="MSearchSelect" src="search/mag_sel.png"
               onmouseover="return searchBox.OnSearchSelectShow()"
               onmouseout="return searchBox.OnSearchSelectHide()"
               alt=""/>
          <input type="text" id="MSearchField" value="Search" accesskey="S"
               onfocus="searchBox.OnSearchFieldFocus(true)" 
               onblur="searchBox.OnSearchFieldFocus(false)" 
               onkeyup="searchBox.OnSearchFieldChange(event)"/>
          </span><span class="right">
            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
          </span>
        </div>
</td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.17 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('namespacerefl_1_1descriptor.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="header">
  <div class="summary">
<a href="#nested-classes">Classes</a> &#124;
<a href="#typedef-members">Typedefs</a> &#124;
<a href="#func-members">Functions</a>  </div>
  <div class="headertitle">
<div class="title">refl::descriptor Namespace Reference</div>  </div>
</div><!--header-->
<div class="contents">

<p>Contains the basic reflection primitives as well as functions operating on those primitives.  
<a href="namespacerefl_1_1descriptor.html#details">More...</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Classes</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrefl_1_1descriptor_1_1field__descriptor.html">field_descriptor</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Represents a reflected field.  <a href="classrefl_1_1descriptor_1_1field__descriptor.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrefl_1_1descriptor_1_1function__descriptor.html">function_descriptor</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Represents a reflected function.  <a href="classrefl_1_1descriptor_1_1function__descriptor.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrefl_1_1descriptor_1_1member__descriptor__base.html">member_descriptor_base</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">The base type for member descriptors.  <a href="classrefl_1_1descriptor_1_1member__descriptor__base.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classrefl_1_1descriptor_1_1type__descriptor.html">type_descriptor</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Represents a reflected type.  <a href="classrefl_1_1descriptor_1_1type__descriptor.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
Typedefs</h2></td></tr>
<tr class="memitem:a8c50bc8b2fa157709ed2453246d0f9a0"><td class="memTemplParams" colspan="2">template&lt;typename T &gt; </td></tr>
<tr class="memitem:a8c50bc8b2fa157709ed2453246d0f9a0"><td class="memTemplItemLeft" align="right" valign="top">using&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacerefl_1_1descriptor.html#a8c50bc8b2fa157709ed2453246d0f9a0">declared_member_list</a> = typename detail::declared_member_list&lt; T &gt;::type</td></tr>
<tr class="memdesc:a8c50bc8b2fa157709ed2453246d0f9a0"><td class="mdescLeft">&#160;</td><td class="mdescRight">A type_list of the declared member descriptors of the target type T.  <a href="namespacerefl_1_1descriptor.html#a8c50bc8b2fa157709ed2453246d0f9a0">More...</a><br /></td></tr>
<tr class="separator:a8c50bc8b2fa157709ed2453246d0f9a0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a50b88518840c2acd134a2171795bd7c3"><td class="memTemplParams" colspan="2">template&lt;typename T &gt; </td></tr>
<tr class="memitem:a50b88518840c2acd134a2171795bd7c3"><td class="memTemplItemLeft" align="right" valign="top">using&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacerefl_1_1descriptor.html#a50b88518840c2acd134a2171795bd7c3">member_list</a> = typename detail::member_list&lt; T &gt;::type</td></tr>
<tr class="memdesc:a50b88518840c2acd134a2171795bd7c3"><td class="mdescLeft">&#160;</td><td class="mdescRight">A type_list of the declared and inherited member descriptors of the target type T.  <a href="namespacerefl_1_1descriptor.html#a50b88518840c2acd134a2171795bd7c3">More...</a><br /></td></tr>
<tr class="separator:a50b88518840c2acd134a2171795bd7c3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a99b739222556b1550c354fe00fe7ed38"><td class="memTemplParams" colspan="2">template&lt;typename FunctionDescriptor , typename... Args&gt; </td></tr>
<tr class="memitem:a99b739222556b1550c354fe00fe7ed38"><td class="memTemplItemLeft" align="right" valign="top">using&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacerefl_1_1descriptor.html#a99b739222556b1550c354fe00fe7ed38">result_type</a> = typename FunctionDescriptor::template <a class="el" href="namespacerefl_1_1descriptor.html#a99b739222556b1550c354fe00fe7ed38">result_type</a>&lt; Args... &gt;</td></tr>
<tr class="memdesc:a99b739222556b1550c354fe00fe7ed38"><td class="mdescLeft">&#160;</td><td class="mdescRight">The return type when invoking the specified descriptor using the provided argument types.  <a href="namespacerefl_1_1descriptor.html#a99b739222556b1550c354fe00fe7ed38">More...</a><br /></td></tr>
<tr class="separator:a99b739222556b1550c354fe00fe7ed38"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:aff945ef69bf77ab1725a5a8d4c1fea98"><td class="memTemplParams" colspan="2">template&lt;typename Descriptor &gt; </td></tr>
<tr class="memitem:aff945ef69bf77ab1725a5a8d4c1fea98"><td class="memTemplItemLeft" align="right" valign="top">constexpr auto&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacerefl_1_1descriptor.html#aff945ef69bf77ab1725a5a8d4c1fea98">get_name</a> (Descriptor d) noexcept</td></tr>
<tr class="memdesc:aff945ef69bf77ab1725a5a8d4c1fea98"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the full name of the descriptor.  <a href="namespacerefl_1_1descriptor.html#aff945ef69bf77ab1725a5a8d4c1fea98">More...</a><br /></td></tr>
<tr class="separator:aff945ef69bf77ab1725a5a8d4c1fea98"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a268faca3e6a1845928f583abe5ef877e"><td class="memTemplParams" colspan="2">template&lt;typename Descriptor &gt; </td></tr>
<tr class="memitem:a268faca3e6a1845928f583abe5ef877e"><td class="memTemplItemLeft" align="right" valign="top">constexpr const auto &amp;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacerefl_1_1descriptor.html#a268faca3e6a1845928f583abe5ef877e">get_attributes</a> (Descriptor d) noexcept</td></tr>
<tr class="memdesc:a268faca3e6a1845928f583abe5ef877e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a const reference to the descriptor's attribute tuple.  <a href="namespacerefl_1_1descriptor.html#a268faca3e6a1845928f583abe5ef877e">More...</a><br /></td></tr>
<tr class="separator:a268faca3e6a1845928f583abe5ef877e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a84ed2ffb6772717a47f526da332c45c8"><td class="memTemplParams" colspan="2">template&lt;typename Descriptor &gt; </td></tr>
<tr class="memitem:a84ed2ffb6772717a47f526da332c45c8"><td class="memTemplItemLeft" align="right" valign="top">constexpr auto&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacerefl_1_1descriptor.html#a84ed2ffb6772717a47f526da332c45c8">get_attribute_types</a> (Descriptor d) noexcept</td></tr>
<tr class="memdesc:a84ed2ffb6772717a47f526da332c45c8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a type_list of the descriptor's attribute types.  <a href="namespacerefl_1_1descriptor.html#a84ed2ffb6772717a47f526da332c45c8">More...</a><br /></td></tr>
<tr class="separator:a84ed2ffb6772717a47f526da332c45c8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acb250d284ee439d4307299a9cb22498c"><td class="memTemplParams" colspan="2">template&lt;typename TypeDescriptor &gt; </td></tr>
<tr class="memitem:acb250d284ee439d4307299a9cb22498c"><td class="memTemplItemLeft" align="right" valign="top">constexpr auto&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacerefl_1_1descriptor.html#acb250d284ee439d4307299a9cb22498c">get_declared_base_types</a> (TypeDescriptor t) noexcept</td></tr>
<tr class="memdesc:acb250d284ee439d4307299a9cb22498c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a type_list of the declared base types of the type.  <a href="namespacerefl_1_1descriptor.html#acb250d284ee439d4307299a9cb22498c">More...</a><br /></td></tr>
<tr class="separator:acb250d284ee439d4307299a9cb22498c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afc445cfd9be739891c2b6731047cf144"><td class="memTemplParams" colspan="2">template&lt;typename TypeDescriptor &gt; </td></tr>
<tr class="memitem:afc445cfd9be739891c2b6731047cf144"><td class="memTemplItemLeft" align="right" valign="top">constexpr auto&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacerefl_1_1descriptor.html#afc445cfd9be739891c2b6731047cf144">get_base_types</a> (TypeDescriptor t) noexcept</td></tr>
<tr class="memdesc:afc445cfd9be739891c2b6731047cf144"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a type_list of the declared and inherited base types of the type.  <a href="namespacerefl_1_1descriptor.html#afc445cfd9be739891c2b6731047cf144">More...</a><br /></td></tr>
<tr class="separator:afc445cfd9be739891c2b6731047cf144"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af716224744f34050b6b43a95251f750c"><td class="memTemplParams" colspan="2">template&lt;typename TypeDescriptor &gt; </td></tr>
<tr class="memitem:af716224744f34050b6b43a95251f750c"><td class="memTemplItemLeft" align="right" valign="top">constexpr auto&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacerefl_1_1descriptor.html#af716224744f34050b6b43a95251f750c">get_declared_members</a> (TypeDescriptor t) noexcept</td></tr>
<tr class="memdesc:af716224744f34050b6b43a95251f750c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a type_list of the declared members of the type.  <a href="namespacerefl_1_1descriptor.html#af716224744f34050b6b43a95251f750c">More...</a><br /></td></tr>
<tr class="separator:af716224744f34050b6b43a95251f750c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad60741d56b2c28157b3588b7348256b7"><td class="memTemplParams" colspan="2">template&lt;typename TypeDescriptor &gt; </td></tr>
<tr class="memitem:ad60741d56b2c28157b3588b7348256b7"><td class="memTemplItemLeft" align="right" valign="top">constexpr auto&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacerefl_1_1descriptor.html#ad60741d56b2c28157b3588b7348256b7">get_members</a> (TypeDescriptor t) noexcept</td></tr>
<tr class="memdesc:ad60741d56b2c28157b3588b7348256b7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a type_list of the declared and inherited members of the type.  <a href="namespacerefl_1_1descriptor.html#ad60741d56b2c28157b3588b7348256b7">More...</a><br /></td></tr>
<tr class="separator:ad60741d56b2c28157b3588b7348256b7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afe87e9035c9416033b3514aa094bc0fd"><td class="memTemplParams" colspan="2">template&lt;typename MemberDescriptor &gt; </td></tr>
<tr class="memitem:afe87e9035c9416033b3514aa094bc0fd"><td class="memTemplItemLeft" align="right" valign="top">constexpr auto&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacerefl_1_1descriptor.html#afe87e9035c9416033b3514aa094bc0fd">get_declarator</a> (MemberDescriptor d) noexcept</td></tr>
<tr class="memdesc:afe87e9035c9416033b3514aa094bc0fd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the <a class="el" href="classrefl_1_1descriptor_1_1type__descriptor.html" title="Represents a reflected type.">type_descriptor</a> of declaring type of the member.  <a href="namespacerefl_1_1descriptor.html#afe87e9035c9416033b3514aa094bc0fd">More...</a><br /></td></tr>
<tr class="separator:afe87e9035c9416033b3514aa094bc0fd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a75e6a5698114443414d43d3b4ae1c50c"><td class="memTemplParams" colspan="2">template&lt;typename MemberDescriptor &gt; </td></tr>
<tr class="memitem:a75e6a5698114443414d43d3b4ae1c50c"><td class="memTemplItemLeft" align="right" valign="top">constexpr auto&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacerefl_1_1descriptor.html#a75e6a5698114443414d43d3b4ae1c50c">get_pointer</a> (MemberDescriptor d) noexcept</td></tr>
<tr class="memdesc:a75e6a5698114443414d43d3b4ae1c50c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a pointer to the reflected field/function.  <a href="namespacerefl_1_1descriptor.html#a75e6a5698114443414d43d3b4ae1c50c">More...</a><br /></td></tr>
<tr class="separator:a75e6a5698114443414d43d3b4ae1c50c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab17264f6fe5ef2e6f10a67304cb40e83"><td class="memTemplParams" colspan="2">template&lt;typename MemberDescriptor , typename... Args&gt; </td></tr>
<tr class="memitem:ab17264f6fe5ef2e6f10a67304cb40e83"><td class="memTemplItemLeft" align="right" valign="top">constexpr auto&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacerefl_1_1descriptor.html#ab17264f6fe5ef2e6f10a67304cb40e83">invoke</a> (MemberDescriptor d, Args &amp;&amp;... args) noexcept -&gt; decltype(d(std::forward&lt; Args &gt;(args)...))</td></tr>
<tr class="memdesc:ab17264f6fe5ef2e6f10a67304cb40e83"><td class="mdescLeft">&#160;</td><td class="mdescRight">Invokes the member with the specified arguments.  <a href="namespacerefl_1_1descriptor.html#ab17264f6fe5ef2e6f10a67304cb40e83">More...</a><br /></td></tr>
<tr class="separator:ab17264f6fe5ef2e6f10a67304cb40e83"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a19a133a31fb133920609bba17fad68b2"><td class="memTemplParams" colspan="2">template&lt;typename FieldDescriptor &gt; </td></tr>
<tr class="memitem:a19a133a31fb133920609bba17fad68b2"><td class="memTemplItemLeft" align="right" valign="top">constexpr auto&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacerefl_1_1descriptor.html#a19a133a31fb133920609bba17fad68b2">is_static</a> (FieldDescriptor d) noexcept</td></tr>
<tr class="memdesc:a19a133a31fb133920609bba17fad68b2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks whether the field is declared as static.  <a href="namespacerefl_1_1descriptor.html#a19a133a31fb133920609bba17fad68b2">More...</a><br /></td></tr>
<tr class="separator:a19a133a31fb133920609bba17fad68b2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6127ab327b1e8f31062e9d0e2440a757"><td class="memTemplParams" colspan="2">template&lt;typename FieldDescriptor &gt; </td></tr>
<tr class="memitem:a6127ab327b1e8f31062e9d0e2440a757"><td class="memTemplItemLeft" align="right" valign="top">constexpr auto&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacerefl_1_1descriptor.html#a6127ab327b1e8f31062e9d0e2440a757">is_const</a> (FieldDescriptor d) noexcept</td></tr>
<tr class="memdesc:a6127ab327b1e8f31062e9d0e2440a757"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks whether the value type of the field is const-qualified.  <a href="namespacerefl_1_1descriptor.html#a6127ab327b1e8f31062e9d0e2440a757">More...</a><br /></td></tr>
<tr class="separator:a6127ab327b1e8f31062e9d0e2440a757"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8d2afa6e939c641de9a9f184388341da"><td class="memTemplParams" colspan="2">template&lt;typename FunctionDescriptor &gt; </td></tr>
<tr class="memitem:a8d2afa6e939c641de9a9f184388341da"><td class="memTemplItemLeft" align="right" valign="top">constexpr auto&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacerefl_1_1descriptor.html#a8d2afa6e939c641de9a9f184388341da">is_resolved</a> (FunctionDescriptor d) noexcept</td></tr>
<tr class="memdesc:a8d2afa6e939c641de9a9f184388341da"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks whether the function pointer was automatically resolved.  <a href="namespacerefl_1_1descriptor.html#a8d2afa6e939c641de9a9f184388341da">More...</a><br /></td></tr>
<tr class="separator:a8d2afa6e939c641de9a9f184388341da"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad3d6702622d06d0e2f5792f903626790"><td class="memTemplParams" colspan="2">template&lt;typename Pointer , typename FunctionDescriptor &gt; </td></tr>
<tr class="memitem:ad3d6702622d06d0e2f5792f903626790"><td class="memTemplItemLeft" align="right" valign="top">constexpr auto&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacerefl_1_1descriptor.html#ad3d6702622d06d0e2f5792f903626790">can_resolve</a> (FunctionDescriptor d) noexcept</td></tr>
<tr class="memdesc:ad3d6702622d06d0e2f5792f903626790"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks whether the function pointer can be resolved as a pointer of the specified type.  <a href="namespacerefl_1_1descriptor.html#ad3d6702622d06d0e2f5792f903626790">More...</a><br /></td></tr>
<tr class="separator:ad3d6702622d06d0e2f5792f903626790"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1a0a7b34d1892fffb8355aaeff29c750"><td class="memTemplParams" colspan="2">template&lt;typename Pointer , typename FunctionDescriptor &gt; </td></tr>
<tr class="memitem:a1a0a7b34d1892fffb8355aaeff29c750"><td class="memTemplItemLeft" align="right" valign="top">constexpr auto&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacerefl_1_1descriptor.html#a1a0a7b34d1892fffb8355aaeff29c750">resolve</a> (FunctionDescriptor d) noexcept</td></tr>
<tr class="memdesc:a1a0a7b34d1892fffb8355aaeff29c750"><td class="mdescLeft">&#160;</td><td class="mdescRight">Resolves the function pointer as a pointer of the specified type.  <a href="namespacerefl_1_1descriptor.html#a1a0a7b34d1892fffb8355aaeff29c750">More...</a><br /></td></tr>
<tr class="separator:a1a0a7b34d1892fffb8355aaeff29c750"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1454a5c8702f245ceafaa9731026f7fe"><td class="memTemplParams" colspan="2">template&lt;typename Descriptor &gt; </td></tr>
<tr class="memitem:a1454a5c8702f245ceafaa9731026f7fe"><td class="memTemplItemLeft" align="right" valign="top">constexpr bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacerefl_1_1descriptor.html#a1454a5c8702f245ceafaa9731026f7fe">is_field</a> (Descriptor) noexcept</td></tr>
<tr class="memdesc:a1454a5c8702f245ceafaa9731026f7fe"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks whether T is a field descriptor.  <a href="namespacerefl_1_1descriptor.html#a1454a5c8702f245ceafaa9731026f7fe">More...</a><br /></td></tr>
<tr class="separator:a1454a5c8702f245ceafaa9731026f7fe"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a76608e349f1f11d8e7eb5ccb759806a6"><td class="memTemplParams" colspan="2">template&lt;typename Descriptor &gt; </td></tr>
<tr class="memitem:a76608e349f1f11d8e7eb5ccb759806a6"><td class="memTemplItemLeft" align="right" valign="top">constexpr bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacerefl_1_1descriptor.html#a76608e349f1f11d8e7eb5ccb759806a6">is_function</a> (Descriptor) noexcept</td></tr>
<tr class="memdesc:a76608e349f1f11d8e7eb5ccb759806a6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks whether T is a function descriptor.  <a href="namespacerefl_1_1descriptor.html#a76608e349f1f11d8e7eb5ccb759806a6">More...</a><br /></td></tr>
<tr class="separator:a76608e349f1f11d8e7eb5ccb759806a6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abe2665e32dba32044036fa66303c12aa"><td class="memTemplParams" colspan="2">template&lt;typename Descriptor &gt; </td></tr>
<tr class="memitem:abe2665e32dba32044036fa66303c12aa"><td class="memTemplItemLeft" align="right" valign="top">constexpr bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacerefl_1_1descriptor.html#abe2665e32dba32044036fa66303c12aa">is_type</a> (Descriptor) noexcept</td></tr>
<tr class="memdesc:abe2665e32dba32044036fa66303c12aa"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks whether T is a type descriptor.  <a href="namespacerefl_1_1descriptor.html#abe2665e32dba32044036fa66303c12aa">More...</a><br /></td></tr>
<tr class="separator:abe2665e32dba32044036fa66303c12aa"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a024d98e2fa7e18a1d7ece243549cde68"><td class="memTemplParams" colspan="2">template&lt;typename A , typename Descriptor &gt; </td></tr>
<tr class="memitem:a024d98e2fa7e18a1d7ece243549cde68"><td class="memTemplItemLeft" align="right" valign="top">constexpr bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacerefl_1_1descriptor.html#a024d98e2fa7e18a1d7ece243549cde68">has_attribute</a> (Descriptor) noexcept</td></tr>
<tr class="memdesc:a024d98e2fa7e18a1d7ece243549cde68"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks whether T has an attribute of type A.  <a href="namespacerefl_1_1descriptor.html#a024d98e2fa7e18a1d7ece243549cde68">More...</a><br /></td></tr>
<tr class="separator:a024d98e2fa7e18a1d7ece243549cde68"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a58bf4f2ac8fe5f09cb185a9e16ade53c"><td class="memTemplParams" colspan="2">template&lt;typename A , typename Descriptor &gt; </td></tr>
<tr class="memitem:a58bf4f2ac8fe5f09cb185a9e16ade53c"><td class="memTemplItemLeft" align="right" valign="top">constexpr const A &amp;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacerefl_1_1descriptor.html#a58bf4f2ac8fe5f09cb185a9e16ade53c">get_attribute</a> (Descriptor d) noexcept</td></tr>
<tr class="memdesc:a58bf4f2ac8fe5f09cb185a9e16ade53c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the value of the attribute A on T.  <a href="namespacerefl_1_1descriptor.html#a58bf4f2ac8fe5f09cb185a9e16ade53c">More...</a><br /></td></tr>
<tr class="separator:a58bf4f2ac8fe5f09cb185a9e16ade53c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a14abdc2a7e7e1f85647a6e79d9ae80dc"><td class="memTemplParams" colspan="2">template&lt;template&lt; typename... &gt; typename A, typename Descriptor &gt; </td></tr>
<tr class="memitem:a14abdc2a7e7e1f85647a6e79d9ae80dc"><td class="memTemplItemLeft" align="right" valign="top">constexpr const auto &amp;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacerefl_1_1descriptor.html#a14abdc2a7e7e1f85647a6e79d9ae80dc">get_attribute</a> (Descriptor d) noexcept</td></tr>
<tr class="memdesc:a14abdc2a7e7e1f85647a6e79d9ae80dc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the value of the attribute A on T.  <a href="namespacerefl_1_1descriptor.html#a14abdc2a7e7e1f85647a6e79d9ae80dc">More...</a><br /></td></tr>
<tr class="separator:a14abdc2a7e7e1f85647a6e79d9ae80dc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a288a833843be97b2d80b51b1de886f99"><td class="memTemplParams" colspan="2">template&lt;typename MemberDescriptor &gt; </td></tr>
<tr class="memitem:a288a833843be97b2d80b51b1de886f99"><td class="memTemplItemLeft" align="right" valign="top">constexpr bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacerefl_1_1descriptor.html#a288a833843be97b2d80b51b1de886f99">is_property</a> (MemberDescriptor d) noexcept</td></tr>
<tr class="memdesc:a288a833843be97b2d80b51b1de886f99"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks whether T is a member descriptor marked with the property attribute.  <a href="namespacerefl_1_1descriptor.html#a288a833843be97b2d80b51b1de886f99">More...</a><br /></td></tr>
<tr class="separator:a288a833843be97b2d80b51b1de886f99"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aadb1bb89c2469071ced6551ca3b9b8fd"><td class="memTemplParams" colspan="2">template&lt;typename FunctionDescriptor &gt; </td></tr>
<tr class="memitem:aadb1bb89c2469071ced6551ca3b9b8fd"><td class="memTemplItemLeft" align="right" valign="top">constexpr <a class="el" href="structrefl_1_1attr_1_1property.html">attr::property</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacerefl_1_1descriptor.html#aadb1bb89c2469071ced6551ca3b9b8fd">get_property</a> (FunctionDescriptor d) noexcept</td></tr>
<tr class="memdesc:aadb1bb89c2469071ced6551ca3b9b8fd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Gets the property attribute.  <a href="namespacerefl_1_1descriptor.html#aadb1bb89c2469071ced6551ca3b9b8fd">More...</a><br /></td></tr>
<tr class="separator:aadb1bb89c2469071ced6551ca3b9b8fd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa68bedab33d684ee5ee4ead24c5586ab"><td class="memTemplParams" colspan="2">template&lt;typename MemberDescriptor &gt; </td></tr>
<tr class="memitem:aa68bedab33d684ee5ee4ead24c5586ab"><td class="memTemplItemLeft" align="right" valign="top">constexpr bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacerefl_1_1descriptor.html#aa68bedab33d684ee5ee4ead24c5586ab">is_readable</a> (MemberDescriptor) noexcept</td></tr>
<tr class="memdesc:aa68bedab33d684ee5ee4ead24c5586ab"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks if T is a 0-arg const-qualified member function with a property attribute or a field.  <a href="namespacerefl_1_1descriptor.html#aa68bedab33d684ee5ee4ead24c5586ab">More...</a><br /></td></tr>
<tr class="separator:aa68bedab33d684ee5ee4ead24c5586ab"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a925e8cb99d6199fe03edeb5109958f8d"><td class="memTemplParams" colspan="2">template&lt;typename MemberDescriptor &gt; </td></tr>
<tr class="memitem:a925e8cb99d6199fe03edeb5109958f8d"><td class="memTemplItemLeft" align="right" valign="top">constexpr bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacerefl_1_1descriptor.html#a925e8cb99d6199fe03edeb5109958f8d">is_writable</a> (MemberDescriptor) noexcept</td></tr>
<tr class="memdesc:a925e8cb99d6199fe03edeb5109958f8d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks if T is a 1-arg non-const-qualified member function with a property attribute or a non-const field.  <a href="namespacerefl_1_1descriptor.html#a925e8cb99d6199fe03edeb5109958f8d">More...</a><br /></td></tr>
<tr class="separator:a925e8cb99d6199fe03edeb5109958f8d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac00126ab409dbc1a5445d37832876fe2"><td class="memTemplParams" colspan="2">template&lt;typename TypeDescriptor &gt; </td></tr>
<tr class="memitem:ac00126ab409dbc1a5445d37832876fe2"><td class="memTemplItemLeft" align="right" valign="top">constexpr auto&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacerefl_1_1descriptor.html#ac00126ab409dbc1a5445d37832876fe2">has_bases</a> (TypeDescriptor t) noexcept</td></tr>
<tr class="memdesc:ac00126ab409dbc1a5445d37832876fe2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks if a type has a bases attribute.  <a href="namespacerefl_1_1descriptor.html#ac00126ab409dbc1a5445d37832876fe2">More...</a><br /></td></tr>
<tr class="separator:ac00126ab409dbc1a5445d37832876fe2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a725c882cfae058b70d50517fe134a938"><td class="memTemplParams" colspan="2">template&lt;typename TypeDescriptor &gt; </td></tr>
<tr class="memitem:a725c882cfae058b70d50517fe134a938"><td class="memTemplItemLeft" align="right" valign="top">constexpr auto&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacerefl_1_1descriptor.html#a725c882cfae058b70d50517fe134a938">get_bases</a> (TypeDescriptor t) noexcept</td></tr>
<tr class="memdesc:a725c882cfae058b70d50517fe134a938"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a list of the type_descriptor&lt;T&gt;s of the base types of the target, as specified by the bases&lt;A, B, ...&gt; attribute.  <a href="namespacerefl_1_1descriptor.html#a725c882cfae058b70d50517fe134a938">More...</a><br /></td></tr>
<tr class="separator:a725c882cfae058b70d50517fe134a938"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5621e8b981bfb910f027fb720320f977"><td class="memTemplParams" colspan="2">template&lt;typename TypeDescriptor &gt; </td></tr>
<tr class="memitem:a5621e8b981bfb910f027fb720320f977"><td class="memTemplItemLeft" align="right" valign="top">constexpr auto&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacerefl_1_1descriptor.html#a5621e8b981bfb910f027fb720320f977">get_simple_name</a> (TypeDescriptor t)</td></tr>
<tr class="memdesc:a5621e8b981bfb910f027fb720320f977"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the unqualified name of the type, discarding the namespace and typenames (if a template type).  <a href="namespacerefl_1_1descriptor.html#a5621e8b981bfb910f027fb720320f977">More...</a><br /></td></tr>
<tr class="separator:a5621e8b981bfb910f027fb720320f977"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa18162a39182126fc2345f2fe3e5b058"><td class="memTemplParams" colspan="2">template&lt;typename MemberDescriptor &gt; </td></tr>
<tr class="memitem:aa18162a39182126fc2345f2fe3e5b058"><td class="memTemplItemLeft" align="right" valign="top">constexpr auto&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacerefl_1_1descriptor.html#aa18162a39182126fc2345f2fe3e5b058">get_debug_name_const</a> (MemberDescriptor d)</td></tr>
<tr class="memdesc:aa18162a39182126fc2345f2fe3e5b058"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the debug name of T (In the form of 'declaring_type::member_name') as a const_string.  <a href="namespacerefl_1_1descriptor.html#aa18162a39182126fc2345f2fe3e5b058">More...</a><br /></td></tr>
<tr class="separator:aa18162a39182126fc2345f2fe3e5b058"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af888ff528516ddbb240168f59e2427e4"><td class="memTemplParams" colspan="2">template&lt;typename MemberDescriptor &gt; </td></tr>
<tr class="memitem:af888ff528516ddbb240168f59e2427e4"><td class="memTemplItemLeft" align="right" valign="top">const char *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacerefl_1_1descriptor.html#af888ff528516ddbb240168f59e2427e4">get_debug_name</a> (MemberDescriptor d)</td></tr>
<tr class="memdesc:af888ff528516ddbb240168f59e2427e4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the debug name of T.  <a href="namespacerefl_1_1descriptor.html#af888ff528516ddbb240168f59e2427e4">More...</a><br /></td></tr>
<tr class="separator:af888ff528516ddbb240168f59e2427e4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9f021ce9c4ef95ab4313aefb8f4f3588"><td class="memTemplParams" colspan="2">template&lt;typename Descriptor &gt; </td></tr>
<tr class="memitem:a9f021ce9c4ef95ab4313aefb8f4f3588"><td class="memTemplItemLeft" align="right" valign="top">const char *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacerefl_1_1descriptor.html#a9f021ce9c4ef95ab4313aefb8f4f3588">get_display_name</a> (Descriptor d) noexcept</td></tr>
<tr class="memdesc:a9f021ce9c4ef95ab4313aefb8f4f3588"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the display name of T.  <a href="namespacerefl_1_1descriptor.html#a9f021ce9c4ef95ab4313aefb8f4f3588">More...</a><br /></td></tr>
<tr class="separator:a9f021ce9c4ef95ab4313aefb8f4f3588"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7cb65ca47183b468df2b8429dc5dea61"><td class="memTemplParams" colspan="2">template&lt;typename Descriptor &gt; </td></tr>
<tr class="memitem:a7cb65ca47183b468df2b8429dc5dea61"><td class="memTemplItemLeft" align="right" valign="top">constexpr auto&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacerefl_1_1descriptor.html#a7cb65ca47183b468df2b8429dc5dea61">get_display_name_const</a> (Descriptor d) noexcept</td></tr>
<tr class="memdesc:a7cb65ca47183b468df2b8429dc5dea61"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the display name of T as a const_string&lt;N&gt;.  <a href="namespacerefl_1_1descriptor.html#a7cb65ca47183b468df2b8429dc5dea61">More...</a><br /></td></tr>
<tr class="separator:a7cb65ca47183b468df2b8429dc5dea61"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a435c850ae43e86f333a9c19b0f24580c"><td class="memTemplParams" colspan="2">template&lt;typename ReadableMember &gt; </td></tr>
<tr class="memitem:a435c850ae43e86f333a9c19b0f24580c"><td class="memTemplItemLeft" align="right" valign="top">constexpr auto&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacerefl_1_1descriptor.html#a435c850ae43e86f333a9c19b0f24580c">has_writer</a> (ReadableMember member)</td></tr>
<tr class="memdesc:a435c850ae43e86f333a9c19b0f24580c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks if there exists a member that has the same display name as the one provied and is writable.  <a href="namespacerefl_1_1descriptor.html#a435c850ae43e86f333a9c19b0f24580c">More...</a><br /></td></tr>
<tr class="separator:a435c850ae43e86f333a9c19b0f24580c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac9505e8a9ccb0bf419927d27f3ff20f3"><td class="memTemplParams" colspan="2">template&lt;typename WritableMember &gt; </td></tr>
<tr class="memitem:ac9505e8a9ccb0bf419927d27f3ff20f3"><td class="memTemplItemLeft" align="right" valign="top">constexpr auto&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacerefl_1_1descriptor.html#ac9505e8a9ccb0bf419927d27f3ff20f3">has_reader</a> (WritableMember member)</td></tr>
<tr class="memdesc:ac9505e8a9ccb0bf419927d27f3ff20f3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks if there exists a member that has the same display name as the one provied and is readable.  <a href="namespacerefl_1_1descriptor.html#ac9505e8a9ccb0bf419927d27f3ff20f3">More...</a><br /></td></tr>
<tr class="separator:ac9505e8a9ccb0bf419927d27f3ff20f3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad4cc337624b45bd2d5f9b27d6811fafd"><td class="memTemplParams" colspan="2">template&lt;typename ReadableMember &gt; </td></tr>
<tr class="memitem:ad4cc337624b45bd2d5f9b27d6811fafd"><td class="memTemplItemLeft" align="right" valign="top">constexpr auto&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacerefl_1_1descriptor.html#ad4cc337624b45bd2d5f9b27d6811fafd">get_writer</a> (ReadableMember member)</td></tr>
<tr class="memdesc:ad4cc337624b45bd2d5f9b27d6811fafd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a member that has the same display name as the one provied and is writable.  <a href="namespacerefl_1_1descriptor.html#ad4cc337624b45bd2d5f9b27d6811fafd">More...</a><br /></td></tr>
<tr class="separator:ad4cc337624b45bd2d5f9b27d6811fafd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3690f579517cc28e9d2eacb3d095fdbb"><td class="memTemplParams" colspan="2">template&lt;typename WritableMember &gt; </td></tr>
<tr class="memitem:a3690f579517cc28e9d2eacb3d095fdbb"><td class="memTemplItemLeft" align="right" valign="top">constexpr auto&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacerefl_1_1descriptor.html#a3690f579517cc28e9d2eacb3d095fdbb">get_reader</a> (WritableMember member)</td></tr>
<tr class="memdesc:a3690f579517cc28e9d2eacb3d095fdbb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a member that has the same display name as the one provied and is readable.  <a href="namespacerefl_1_1descriptor.html#a3690f579517cc28e9d2eacb3d095fdbb">More...</a><br /></td></tr>
<tr class="separator:a3690f579517cc28e9d2eacb3d095fdbb"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Contains the basic reflection primitives as well as functions operating on those primitives. </p>
</div><h2 class="groupheader">Typedef Documentation</h2>
<a id="a8c50bc8b2fa157709ed2453246d0f9a0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8c50bc8b2fa157709ed2453246d0f9a0">&#9670;&nbsp;</a></span>declared_member_list</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename T &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">using <a class="el" href="namespacerefl_1_1descriptor.html#a8c50bc8b2fa157709ed2453246d0f9a0">refl::descriptor::declared_member_list</a> = typedef typename detail::declared_member_list&lt;T&gt;::type</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>A type_list of the declared member descriptors of the target type T. </p>

</div>
</div>
<a id="a50b88518840c2acd134a2171795bd7c3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a50b88518840c2acd134a2171795bd7c3">&#9670;&nbsp;</a></span>member_list</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename T &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">using <a class="el" href="namespacerefl_1_1descriptor.html#a50b88518840c2acd134a2171795bd7c3">refl::descriptor::member_list</a> = typedef typename detail::member_list&lt;T&gt;::type</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>A type_list of the declared and inherited member descriptors of the target type T. </p>

</div>
</div>
<a id="a99b739222556b1550c354fe00fe7ed38"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a99b739222556b1550c354fe00fe7ed38">&#9670;&nbsp;</a></span>result_type</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename FunctionDescriptor , typename... Args&gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">using <a class="el" href="namespacerefl_1_1descriptor.html#a99b739222556b1550c354fe00fe7ed38">refl::descriptor::result_type</a> = typedef typename FunctionDescriptor::template <a class="el" href="namespacerefl_1_1descriptor.html#a99b739222556b1550c354fe00fe7ed38">result_type</a>&lt;Args...&gt;</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>The return type when invoking the specified descriptor using the provided argument types. </p>
<p>Argument coversion will be applied as per C++ rules. </p>

</div>
</div>
<h2 class="groupheader">Function Documentation</h2>
<a id="ad3d6702622d06d0e2f5792f903626790"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad3d6702622d06d0e2f5792f903626790">&#9670;&nbsp;</a></span>can_resolve()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Pointer , typename FunctionDescriptor &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">constexpr auto refl::descriptor::can_resolve </td>
          <td>(</td>
          <td class="paramtype">FunctionDescriptor&#160;</td>
          <td class="paramname"><em>d</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span><span class="mlabel">noexcept</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Checks whether the function pointer can be resolved as a pointer of the specified type. </p>
<div class="fragment"><div class="line"><span class="keyword">struct </span>Foo {</div>
<div class="line">  <span class="keywordtype">void</span> bar();</div>
<div class="line">  <span class="keywordtype">void</span> bar(<span class="keywordtype">int</span>);</div>
<div class="line">};</div>
<div class="line">REFL_AUTO(type(Foo), func(bar))</div>
<div class="line">can_resolve&lt;void(Foo::*)()&gt;(<a class="code" href="namespacerefl_1_1trait.html#a90fc62b3597ebdeda8040ff78c0628c3">get_t</a>&lt;0, member_list&lt;Foo&gt;&gt;()) -&gt; <span class="keyword">true</span></div>
<div class="line">can_resolve&lt;void(Foo::*)(int)&gt;(<a class="code" href="namespacerefl_1_1trait.html#a90fc62b3597ebdeda8040ff78c0628c3">get_t</a>&lt;0, member_list&lt;Foo&gt;&gt;()) -&gt; <span class="keyword">true</span></div>
<div class="line">can_resolve&lt;void(Foo::*)(std::string)&gt;(<a class="code" href="namespacerefl_1_1trait.html#a90fc62b3597ebdeda8040ff78c0628c3">get_t</a>&lt;0, member_list&lt;Foo&gt;&gt;()) -&gt; <span class="keyword">false</span></div>
</div><!-- fragment --> 
</div>
</div>
<a id="a58bf4f2ac8fe5f09cb185a9e16ade53c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a58bf4f2ac8fe5f09cb185a9e16ade53c">&#9670;&nbsp;</a></span>get_attribute() <span class="overload">[1/2]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename A , typename Descriptor &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">constexpr const A&amp; refl::descriptor::get_attribute </td>
          <td>(</td>
          <td class="paramtype">Descriptor&#160;</td>
          <td class="paramname"><em>d</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span><span class="mlabel">noexcept</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Returns the value of the attribute A on T. </p>
<div class="fragment"><div class="line">REFL_AUTO(type(User), func(<a class="code" href="namespacerefl_1_1descriptor.html#aff945ef69bf77ab1725a5a8d4c1fea98">get_name</a>, property()), func(set_name, property()))</div>
<div class="line"><a class="code" href="namespacerefl_1_1descriptor.html#a58bf4f2ac8fe5f09cb185a9e16ade53c">get_attribute</a>&lt;attr::property&gt;(<a class="code" href="namespacerefl_1_1trait.html#a90fc62b3597ebdeda8040ff78c0628c3">get_t</a>&lt;0, <a class="code" href="namespacerefl_1_1descriptor.html#a50b88518840c2acd134a2171795bd7c3">member_list</a>&lt;User&gt;&gt;{}) -&gt; property{ friendly_name = nullopt }</div>
</div><!-- fragment --> 
</div>
</div>
<a id="a14abdc2a7e7e1f85647a6e79d9ae80dc"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a14abdc2a7e7e1f85647a6e79d9ae80dc">&#9670;&nbsp;</a></span>get_attribute() <span class="overload">[2/2]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;template&lt; typename... &gt; typename A, typename Descriptor &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">constexpr const auto&amp; refl::descriptor::get_attribute </td>
          <td>(</td>
          <td class="paramtype">Descriptor&#160;</td>
          <td class="paramname"><em>d</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span><span class="mlabel">noexcept</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Returns the value of the attribute A on T. </p>
<div class="fragment"><div class="line">REFL_AUTO(type(Random, <a class="code" href="namespacerefl_1_1runtime.html#a06e1996b05966eac4f282b6656169d6a">debug</a>{ [](<span class="keyword">auto</span> os, <span class="keyword">auto</span>){ os &lt;&lt; <span class="stringliteral">&quot;[Random]&quot;</span>; } }))</div>
<div class="line"><a class="code" href="namespacerefl_1_1descriptor.html#a58bf4f2ac8fe5f09cb185a9e16ade53c">get_attribute</a>&lt;attr::<a class="code" href="namespacerefl_1_1runtime.html#a06e1996b05966eac4f282b6656169d6a">debug</a>&gt;(<a class="code" href="namespacerefl.html#ae95fbc2d63a7db5ce4d8a4dcca3d637e">reflect</a>&lt;Random&gt;()) -&gt; instance of <a class="code" href="namespacerefl_1_1runtime.html#a06e1996b05966eac4f282b6656169d6a">debug</a>&lt;LambdaType&gt;</div>
</div><!-- fragment --> 
</div>
</div>
<a id="a84ed2ffb6772717a47f526da332c45c8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a84ed2ffb6772717a47f526da332c45c8">&#9670;&nbsp;</a></span>get_attribute_types()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Descriptor &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">constexpr auto refl::descriptor::get_attribute_types </td>
          <td>(</td>
          <td class="paramtype">Descriptor&#160;</td>
          <td class="paramname"><em>d</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span><span class="mlabel">noexcept</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Returns a type_list of the descriptor's attribute types. </p>
<div class="fragment"><div class="line"><span class="keyword">struct </span>Foo {};</div>
<div class="line">REFL_AUTO(type(Foo, bases&lt;&gt;, ns::serializable()))</div>
<div class="line"> </div>
<div class="line"><a class="code" href="namespacerefl_1_1descriptor.html#a84ed2ffb6772717a47f526da332c45c8">get_attribute_types</a>(<a class="code" href="namespacerefl.html#ae95fbc2d63a7db5ce4d8a4dcca3d637e">reflect</a>&lt;Foo&gt;()) -&gt; type_list&lt;attr::base_types&lt;&gt;, ns::serializable&gt;</div>
</div><!-- fragment --> 
</div>
</div>
<a id="a268faca3e6a1845928f583abe5ef877e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a268faca3e6a1845928f583abe5ef877e">&#9670;&nbsp;</a></span>get_attributes()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Descriptor &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">constexpr const auto&amp; refl::descriptor::get_attributes </td>
          <td>(</td>
          <td class="paramtype">Descriptor&#160;</td>
          <td class="paramname"><em>d</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span><span class="mlabel">noexcept</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Returns a const reference to the descriptor's attribute tuple. </p>
<div class="fragment"><div class="line"><span class="keyword">struct </span>Foo {};</div>
<div class="line">REFL_AUTO(type(Foo, bases&lt;&gt;, ns::serializable()))</div>
<div class="line"> </div>
<div class="line"><a class="code" href="namespacerefl_1_1descriptor.html#a268faca3e6a1845928f583abe5ef877e">get_attributes</a>(<a class="code" href="namespacerefl.html#ae95fbc2d63a7db5ce4d8a4dcca3d637e">reflect</a>&lt;Foo&gt;()) -&gt; const <a class="code" href="namespacestd.html">std</a>::tuple&lt;attr::base_types&lt;&gt;, ns::serializable&gt;&amp;</div>
</div><!-- fragment --> 
</div>
</div>
<a id="afc445cfd9be739891c2b6731047cf144"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afc445cfd9be739891c2b6731047cf144">&#9670;&nbsp;</a></span>get_base_types()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename TypeDescriptor &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">constexpr auto refl::descriptor::get_base_types </td>
          <td>(</td>
          <td class="paramtype">TypeDescriptor&#160;</td>
          <td class="paramname"><em>t</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span><span class="mlabel">noexcept</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Returns a type_list of the declared and inherited base types of the type. </p>
<p>Combine with reflect_types to obtain type_descriptors for those types. </p><dl class="section see"><dt>See also</dt><dd>reflect_types</dd></dl>
<div class="fragment"><div class="line"><span class="keyword">struct </span>Animal {};</div>
<div class="line">REFL_AUTO(type(Animal))</div>
<div class="line"><span class="keyword">struct </span>Mammal : Animal {};</div>
<div class="line">REFL_AUTO(type(Mammal, bases&lt;Animal&gt;))</div>
<div class="line"><span class="keyword">struct </span>Dog : Mammal {}:</div>
<div class="line">REFL_AUTO(type(Dog, bases&lt;Mammal&gt;))</div>
<div class="line"> </div>
<div class="line"><a class="code" href="namespacerefl_1_1descriptor.html#afc445cfd9be739891c2b6731047cf144">get_base_types</a>(reflect&lt;Dog&gt;()) -&gt; type_list&lt;Mammal, Animal&gt;</div>
</div><!-- fragment --> 
</div>
</div>
<a id="a725c882cfae058b70d50517fe134a938"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a725c882cfae058b70d50517fe134a938">&#9670;&nbsp;</a></span>get_bases()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename TypeDescriptor &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">constexpr auto refl::descriptor::get_bases </td>
          <td>(</td>
          <td class="paramtype">TypeDescriptor&#160;</td>
          <td class="paramname"><em>t</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span><span class="mlabel">noexcept</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Returns a list of the type_descriptor&lt;T&gt;s of the base types of the target, as specified by the bases&lt;A, B, ...&gt; attribute. </p>
<dl class="deprecated"><dt><b><a class="el" href="deprecated.html#_deprecated000002">Deprecated:</a></b></dt><dd>Use get_base_types in combination with reflect_types instead. </dd></dl>
<dl class="section see"><dt>See also</dt><dd>refl::attr::bases </dd>
<dd>
<a class="el" href="namespacerefl_1_1descriptor.html#ac00126ab409dbc1a5445d37832876fe2" title="Checks if a type has a bases attribute.">refl::descriptor::has_bases</a></dd></dl>
<div class="fragment"><div class="line">REFL_AUTO(type(Dog, bases&lt;Animal&gt;))</div>
<div class="line"><a class="code" href="namespacerefl_1_1descriptor.html#a725c882cfae058b70d50517fe134a938">get_bases</a>(reflect&lt;Dog&gt;()) -&gt; type_list&lt;type_descriptor&lt;Animal&gt;&gt;</div>
</div><!-- fragment --> 
</div>
</div>
<a id="af888ff528516ddbb240168f59e2427e4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af888ff528516ddbb240168f59e2427e4">&#9670;&nbsp;</a></span>get_debug_name()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename MemberDescriptor &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">const char* refl::descriptor::get_debug_name </td>
          <td>(</td>
          <td class="paramtype">MemberDescriptor&#160;</td>
          <td class="paramname"><em>d</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Returns the debug name of T. </p>
<p>(In the form of 'declaring_type::member_name'). </p><div class="fragment"><div class="line">REFL_AUTO(type(Point), field(x), field(y))</div>
<div class="line"><a class="code" href="namespacerefl_1_1descriptor.html#af888ff528516ddbb240168f59e2427e4">get_debug_name</a>(<a class="code" href="namespacerefl_1_1trait.html#a90fc62b3597ebdeda8040ff78c0628c3">get_t</a>&lt;0, member_list&lt;Point&gt;&gt;{}) -&gt; <span class="stringliteral">&quot;Point::x&quot;</span></div>
</div><!-- fragment --> 
</div>
</div>
<a id="aa18162a39182126fc2345f2fe3e5b058"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa18162a39182126fc2345f2fe3e5b058">&#9670;&nbsp;</a></span>get_debug_name_const()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename MemberDescriptor &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">constexpr auto refl::descriptor::get_debug_name_const </td>
          <td>(</td>
          <td class="paramtype">MemberDescriptor&#160;</td>
          <td class="paramname"><em>d</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Returns the debug name of T (In the form of 'declaring_type::member_name') as a const_string. </p>
<div class="fragment"><div class="line">REFL_AUTO(type(Point), field(x), field(y))</div>
<div class="line"><a class="code" href="namespacerefl_1_1descriptor.html#aa18162a39182126fc2345f2fe3e5b058">get_debug_name_const</a>(<a class="code" href="namespacerefl_1_1trait.html#a90fc62b3597ebdeda8040ff78c0628c3">get_t</a>&lt;0, member_list&lt;Point&gt;&gt;{}) -&gt; <span class="stringliteral">&quot;Point::x&quot;</span></div>
</div><!-- fragment --> 
</div>
</div>
<a id="afe87e9035c9416033b3514aa094bc0fd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afe87e9035c9416033b3514aa094bc0fd">&#9670;&nbsp;</a></span>get_declarator()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename MemberDescriptor &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">constexpr auto refl::descriptor::get_declarator </td>
          <td>(</td>
          <td class="paramtype">MemberDescriptor&#160;</td>
          <td class="paramname"><em>d</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span><span class="mlabel">noexcept</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Returns the <a class="el" href="classrefl_1_1descriptor_1_1type__descriptor.html" title="Represents a reflected type.">type_descriptor</a> of declaring type of the member. </p>
<div class="fragment"><div class="line"><span class="keyword">struct </span>Foo {</div>
<div class="line">  <span class="keywordtype">int</span> bar;</div>
<div class="line">};</div>
<div class="line">REFL_AUTO(type(Foo), field(bar)</div>
<div class="line"><a class="code" href="namespacerefl_1_1descriptor.html#afe87e9035c9416033b3514aa094bc0fd">get_declarator</a>(<a class="code" href="namespacerefl_1_1trait.html#a90fc62b3597ebdeda8040ff78c0628c3">get_t</a>&lt;0, member_list&lt;Foo&gt;&gt;()) -&gt; type_descriptor&lt;Foo&gt;{}</div>
</div><!-- fragment --> 
</div>
</div>
<a id="acb250d284ee439d4307299a9cb22498c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acb250d284ee439d4307299a9cb22498c">&#9670;&nbsp;</a></span>get_declared_base_types()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename TypeDescriptor &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">constexpr auto refl::descriptor::get_declared_base_types </td>
          <td>(</td>
          <td class="paramtype">TypeDescriptor&#160;</td>
          <td class="paramname"><em>t</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span><span class="mlabel">noexcept</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Returns a type_list of the declared base types of the type. </p>
<p>Combine with reflect_types to obtain type_descriptors for those types. </p><dl class="section see"><dt>See also</dt><dd>reflect_types</dd></dl>
<div class="fragment"><div class="line"><span class="keyword">struct </span>Animal {};</div>
<div class="line">REFL_AUTO(type(Animal))</div>
<div class="line"><span class="keyword">struct </span>Mammal : Animal {};</div>
<div class="line">REFL_AUTO(type(Mammal, bases&lt;Animal&gt;))</div>
<div class="line"><span class="keyword">struct </span>Dog : Mammal {}:</div>
<div class="line">REFL_AUTO(type(Dog, bases&lt;Mammal&gt;))</div>
<div class="line"> </div>
<div class="line"><a class="code" href="namespacerefl_1_1descriptor.html#afc445cfd9be739891c2b6731047cf144">get_base_types</a>(reflect&lt;Dog&gt;()) -&gt; type_list&lt;Mammal&gt;</div>
</div><!-- fragment --> 
</div>
</div>
<a id="af716224744f34050b6b43a95251f750c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af716224744f34050b6b43a95251f750c">&#9670;&nbsp;</a></span>get_declared_members()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename TypeDescriptor &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">constexpr auto refl::descriptor::get_declared_members </td>
          <td>(</td>
          <td class="paramtype">TypeDescriptor&#160;</td>
          <td class="paramname"><em>t</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span><span class="mlabel">noexcept</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Returns a type_list of the declared members of the type. </p>
<div class="fragment"><div class="line"><span class="keyword">struct </span>Base {</div>
<div class="line"> <span class="keywordtype">int</span> val;</div>
<div class="line">};</div>
<div class="line"><span class="keyword">struct </span>Foo : Base {</div>
<div class="line">  <span class="keywordtype">int</span> bar, baz;</div>
<div class="line">};</div>
<div class="line">REFL_AUTO(type(Foo, bases&lt;Base&gt;), field(bar), field(baz))</div>
<div class="line"><a class="code" href="namespacerefl_1_1descriptor.html#af716224744f34050b6b43a95251f750c">get_declared_members</a>(reflect&lt;Foo&gt;()) -&gt; type_list&lt;field_descriptor&lt;Foo, 0&gt; /bar/, field_descriptor&lt;Foo, 1&gt; /baz/&gt;</div>
</div><!-- fragment --> 
</div>
</div>
<a id="a9f021ce9c4ef95ab4313aefb8f4f3588"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9f021ce9c4ef95ab4313aefb8f4f3588">&#9670;&nbsp;</a></span>get_display_name()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Descriptor &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">const char* refl::descriptor::get_display_name </td>
          <td>(</td>
          <td class="paramtype">Descriptor&#160;</td>
          <td class="paramname"><em>d</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">noexcept</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Returns the display name of T. </p>
<p>Uses the friendly_name of the property attribute, or the normalized name if no friendly_name was provided.</p>
<div class="fragment"><div class="line"><span class="keyword">struct </span>Foo {</div>
<div class="line">  <span class="keywordtype">int</span> get_foo() <span class="keyword">const</span>;</div>
<div class="line">  <span class="keywordtype">int</span> GetFoo() <span class="keyword">const</span>;</div>
<div class="line">  <span class="keywordtype">int</span> get_non_const() /missing <span class="keyword">const</span>/;</div>
<div class="line">  <span class="keywordtype">int</span> get_custom() <span class="keyword">const</span>;</div>
<div class="line">};</div>
<div class="line">REFL_AUTO(</div>
<div class="line">  type(Foo),</div>
<div class="line">  func(get_foo, property()),</div>
<div class="line">  func(GetFoo, property()),</div>
<div class="line">  func(get_non_const, property()),</div>
<div class="line">  func(get_custom, property(<span class="stringliteral">&quot;value&quot;</span>)),</div>
<div class="line">)</div>
<div class="line"> </div>
<div class="line"><a class="code" href="namespacerefl_1_1descriptor.html#a9f021ce9c4ef95ab4313aefb8f4f3588">get_display_name</a>(<a class="code" href="namespacerefl_1_1trait.html#a90fc62b3597ebdeda8040ff78c0628c3">get_t</a>&lt;0, <a class="code" href="namespacerefl_1_1descriptor.html#a50b88518840c2acd134a2171795bd7c3">member_list</a>&lt;Foo&gt;&gt;{}) -&gt; <span class="stringliteral">&quot;foo&quot;</span></div>
<div class="line"><a class="code" href="namespacerefl_1_1descriptor.html#a9f021ce9c4ef95ab4313aefb8f4f3588">get_display_name</a>(<a class="code" href="namespacerefl_1_1trait.html#a90fc62b3597ebdeda8040ff78c0628c3">get_t</a>&lt;1, member_list&lt;Foo&gt;&gt;{}) -&gt; <span class="stringliteral">&quot;Foo&quot;</span></div>
<div class="line"><a class="code" href="namespacerefl_1_1descriptor.html#a9f021ce9c4ef95ab4313aefb8f4f3588">get_display_name</a>(<a class="code" href="namespacerefl_1_1trait.html#a90fc62b3597ebdeda8040ff78c0628c3">get_t</a>&lt;2, member_list&lt;Foo&gt;&gt;{}) -&gt; <span class="stringliteral">&quot;get_non_const&quot;</span></div>
<div class="line"><a class="code" href="namespacerefl_1_1descriptor.html#a9f021ce9c4ef95ab4313aefb8f4f3588">get_display_name</a>(<a class="code" href="namespacerefl_1_1trait.html#a90fc62b3597ebdeda8040ff78c0628c3">get_t</a>&lt;3, member_list&lt;Foo&gt;&gt;{}) -&gt; <span class="stringliteral">&quot;value&quot;</span></div>
</div><!-- fragment --> 
</div>
</div>
<a id="a7cb65ca47183b468df2b8429dc5dea61"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7cb65ca47183b468df2b8429dc5dea61">&#9670;&nbsp;</a></span>get_display_name_const()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Descriptor &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">constexpr auto refl::descriptor::get_display_name_const </td>
          <td>(</td>
          <td class="paramtype">Descriptor&#160;</td>
          <td class="paramname"><em>d</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span><span class="mlabel">noexcept</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Returns the display name of T as a const_string&lt;N&gt;. </p>
<p>Uses the friendly_name of the property attribute, or the normalized name if no friendly_name was provided. </p><dl class="section see"><dt>See also</dt><dd><a class="el" href="namespacerefl_1_1descriptor.html#a9f021ce9c4ef95ab4313aefb8f4f3588" title="Returns the display name of T.">get_display_name</a> </dd></dl>

</div>
</div>
<a id="ad60741d56b2c28157b3588b7348256b7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad60741d56b2c28157b3588b7348256b7">&#9670;&nbsp;</a></span>get_members()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename TypeDescriptor &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">constexpr auto refl::descriptor::get_members </td>
          <td>(</td>
          <td class="paramtype">TypeDescriptor&#160;</td>
          <td class="paramname"><em>t</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span><span class="mlabel">noexcept</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Returns a type_list of the declared and inherited members of the type. </p>
<div class="fragment"><div class="line"><span class="keyword">struct </span>Base {</div>
<div class="line"> <span class="keywordtype">int</span> val;</div>
<div class="line">};</div>
<div class="line"><span class="keyword">struct </span>Foo : Base {</div>
<div class="line">  <span class="keywordtype">int</span> bar, baz;</div>
<div class="line">};</div>
<div class="line">REFL_AUTO(type(Foo, bases&lt;Base&gt;), field(bar), field(baz))</div>
<div class="line"><a class="code" href="namespacerefl_1_1descriptor.html#ad60741d56b2c28157b3588b7348256b7">get_members</a>(reflect&lt;Foo&gt;()) -&gt; type_list&lt;field_descriptor&lt;Foo, 0&gt; /bar/, field_descriptor&lt;Foo, 1&gt; /baz/, field_descriptor&lt;Base, 0&gt; /val/&gt;</div>
</div><!-- fragment --> 
</div>
</div>
<a id="aff945ef69bf77ab1725a5a8d4c1fea98"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aff945ef69bf77ab1725a5a8d4c1fea98">&#9670;&nbsp;</a></span>get_name()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Descriptor &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">constexpr auto refl::descriptor::get_name </td>
          <td>(</td>
          <td class="paramtype">Descriptor&#160;</td>
          <td class="paramname"><em>d</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span><span class="mlabel">noexcept</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Returns the full name of the descriptor. </p>
<div class="fragment"><div class="line"><span class="keyword">namespace </span>ns {</div>
<div class="line">  <span class="keyword">struct </span>Foo {</div>
<div class="line">    <span class="keywordtype">int</span> x;</div>
<div class="line">  };</div>
<div class="line">}</div>
<div class="line">REFL_AUTO(type(ns::Foo), field(x))</div>
<div class="line"> </div>
<div class="line"><a class="code" href="namespacerefl_1_1descriptor.html#aff945ef69bf77ab1725a5a8d4c1fea98">get_name</a>(reflect&lt;Foo&gt;()) -&gt; <span class="stringliteral">&quot;ns::Foo&quot;</span></div>
<div class="line"><a class="code" href="namespacerefl_1_1descriptor.html#aff945ef69bf77ab1725a5a8d4c1fea98">get_name</a>(<a class="code" href="namespacerefl_1_1trait.html#a90fc62b3597ebdeda8040ff78c0628c3">get_t</a>&lt;0, member_list&lt;Foo&gt;&gt;()) -&gt; <span class="stringliteral">&quot;x&quot;</span></div>
</div><!-- fragment --> 
</div>
</div>
<a id="a75e6a5698114443414d43d3b4ae1c50c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a75e6a5698114443414d43d3b4ae1c50c">&#9670;&nbsp;</a></span>get_pointer()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename MemberDescriptor &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">constexpr auto refl::descriptor::get_pointer </td>
          <td>(</td>
          <td class="paramtype">MemberDescriptor&#160;</td>
          <td class="paramname"><em>d</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span><span class="mlabel">noexcept</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Returns a pointer to the reflected field/function. </p>
<p>When the member is a function, the return value might be nullptr if the type of the function pointer cannot be resolved. </p><dl class="section see"><dt>See also</dt><dd><a class="el" href="namespacerefl_1_1descriptor.html#a8d2afa6e939c641de9a9f184388341da" title="Checks whether the function pointer was automatically resolved.">is_resolved</a> </dd>
<dd>
<a class="el" href="namespacerefl_1_1descriptor.html#ad3d6702622d06d0e2f5792f903626790" title="Checks whether the function pointer can be resolved as a pointer of the specified type.">can_resolve</a> </dd>
<dd>
<a class="el" href="namespacerefl_1_1descriptor.html#a1a0a7b34d1892fffb8355aaeff29c750" title="Resolves the function pointer as a pointer of the specified type.">resolve</a></dd></dl>
<div class="fragment"><div class="line"><span class="keyword">struct </span>Foo {</div>
<div class="line">  <span class="keywordtype">int</span> bar;</div>
<div class="line">  <span class="keyword">static</span> <span class="keywordtype">int</span> baz;</div>
<div class="line">};</div>
<div class="line">REFL_AUTO(type(Foo), field(bar), field(baz))</div>
<div class="line"><a class="code" href="namespacerefl_1_1descriptor.html#a75e6a5698114443414d43d3b4ae1c50c">get_pointer</a>(<a class="code" href="namespacerefl_1_1trait.html#a90fc62b3597ebdeda8040ff78c0628c3">get_t</a>&lt;0, member_list&lt;Foo&gt;&gt;()) -&gt; (<span class="keywordtype">int</span> Foo::*) &amp;Foo::bar</div>
<div class="line"><a class="code" href="namespacerefl_1_1descriptor.html#a75e6a5698114443414d43d3b4ae1c50c">get_pointer</a>(<a class="code" href="namespacerefl_1_1trait.html#a90fc62b3597ebdeda8040ff78c0628c3">get_t</a>&lt;1, member_list&lt;Foo&gt;&gt;()) -&gt; (<span class="keywordtype">int</span>*) &amp;Foo::baz</div>
</div><!-- fragment --> 
</div>
</div>
<a id="aadb1bb89c2469071ced6551ca3b9b8fd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aadb1bb89c2469071ced6551ca3b9b8fd">&#9670;&nbsp;</a></span>get_property()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename FunctionDescriptor &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">constexpr <a class="el" href="structrefl_1_1attr_1_1property.html">attr::property</a> refl::descriptor::get_property </td>
          <td>(</td>
          <td class="paramtype">FunctionDescriptor&#160;</td>
          <td class="paramname"><em>d</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span><span class="mlabel">noexcept</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Gets the property attribute. </p>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="structrefl_1_1attr_1_1property.html" title="Used to decorate a function that serves as a property.">refl::attr::property</a> </dd>
<dd>
<a class="el" href="namespacerefl_1_1descriptor.html#a288a833843be97b2d80b51b1de886f99" title="Checks whether T is a member descriptor marked with the property attribute.">refl::descriptor::is_property</a></dd></dl>
<div class="fragment"><div class="line">REFL_AUTO(type(User), func(<a class="code" href="namespacerefl_1_1descriptor.html#aff945ef69bf77ab1725a5a8d4c1fea98">get_name</a>, property(<span class="stringliteral">&quot;user_name&quot;</span>)), func(set_name, property()))</div>
<div class="line">*<a class="code" href="namespacerefl_1_1descriptor.html#aadb1bb89c2469071ced6551ca3b9b8fd">get_property</a>(<a class="code" href="namespacerefl_1_1trait.html#a90fc62b3597ebdeda8040ff78c0628c3">get_t</a>&lt;0, member_list&lt;User&gt;&gt;{}).friendly_name -&gt; <span class="stringliteral">&quot;user_name&quot;</span></div>
</div><!-- fragment --> 
</div>
</div>
<a id="a3690f579517cc28e9d2eacb3d095fdbb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3690f579517cc28e9d2eacb3d095fdbb">&#9670;&nbsp;</a></span>get_reader()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename WritableMember &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">constexpr auto refl::descriptor::get_reader </td>
          <td>(</td>
          <td class="paramtype">WritableMember&#160;</td>
          <td class="paramname"><em>member</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Returns a member that has the same display name as the one provied and is readable. </p>
<p>For setter methods with a property attribute, the return value will be a reflected getter method with a property with the same display name (property name normalization applies automatically). For fields, returns the same descriptor. </p>

</div>
</div>
<a id="a5621e8b981bfb910f027fb720320f977"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5621e8b981bfb910f027fb720320f977">&#9670;&nbsp;</a></span>get_simple_name()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename TypeDescriptor &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">constexpr auto refl::descriptor::get_simple_name </td>
          <td>(</td>
          <td class="paramtype">TypeDescriptor&#160;</td>
          <td class="paramname"><em>t</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Returns the unqualified name of the type, discarding the namespace and typenames (if a template type). </p>
<div class="fragment"><div class="line"><a class="code" href="namespacerefl_1_1descriptor.html#a5621e8b981bfb910f027fb720320f977">get_simple_name</a>(<a class="code" href="namespacerefl.html#ae95fbc2d63a7db5ce4d8a4dcca3d637e">reflect</a>&lt;std::vector&lt;float&gt;&gt;()) -&gt; <span class="stringliteral">&quot;vector&quot;</span></div>
</div><!-- fragment --> 
</div>
</div>
<a id="ad4cc337624b45bd2d5f9b27d6811fafd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad4cc337624b45bd2d5f9b27d6811fafd">&#9670;&nbsp;</a></span>get_writer()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename ReadableMember &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">constexpr auto refl::descriptor::get_writer </td>
          <td>(</td>
          <td class="paramtype">ReadableMember&#160;</td>
          <td class="paramname"><em>member</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Returns a member that has the same display name as the one provied and is writable. </p>
<p>For getter methods with a property attribute, the return value will the reflected setter method with a property with the same display name (property name normalization applies automatically). For fields, returns the same descriptor if writable. </p>

</div>
</div>
<a id="a024d98e2fa7e18a1d7ece243549cde68"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a024d98e2fa7e18a1d7ece243549cde68">&#9670;&nbsp;</a></span>has_attribute()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename A , typename Descriptor &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">constexpr bool refl::descriptor::has_attribute </td>
          <td>(</td>
          <td class="paramtype">Descriptor&#160;</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span><span class="mlabel">noexcept</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Checks whether T has an attribute of type A. </p>
<p>Checks whether T has an attribute of that is a template instance of A.</p>
<div class="fragment"><div class="line">REFL_AUTO(type(User), func(<a class="code" href="namespacerefl_1_1descriptor.html#aff945ef69bf77ab1725a5a8d4c1fea98">get_name</a>, property()), func(set_name, property()))</div>
<div class="line"><a class="code" href="namespacerefl_1_1descriptor.html#a024d98e2fa7e18a1d7ece243549cde68">has_attribute</a>&lt;attr::property&gt;(<a class="code" href="namespacerefl_1_1trait.html#a90fc62b3597ebdeda8040ff78c0628c3">get_t</a>&lt;0, <a class="code" href="namespacerefl_1_1descriptor.html#a50b88518840c2acd134a2171795bd7c3">member_list</a>&lt;User&gt;&gt;{}) -&gt; true</div>
</div><!-- fragment --><div class="fragment"><div class="line">REFL_AUTO(type(Random, <a class="code" href="namespacerefl_1_1runtime.html#a06e1996b05966eac4f282b6656169d6a">debug</a>{ [](<span class="keyword">auto</span> os, <span class="keyword">auto</span>){ os &lt;&lt; <span class="stringliteral">&quot;[Random]&quot;</span>; } }))</div>
<div class="line"><a class="code" href="namespacerefl_1_1descriptor.html#a024d98e2fa7e18a1d7ece243549cde68">has_attribute</a>&lt;attr::<a class="code" href="namespacerefl_1_1runtime.html#a06e1996b05966eac4f282b6656169d6a">debug</a>&gt;(<a class="code" href="namespacerefl.html#ae95fbc2d63a7db5ce4d8a4dcca3d637e">reflect</a>&lt;Random&gt;()) -&gt; true</div>
</div><!-- fragment --> 
</div>
</div>
<a id="ac00126ab409dbc1a5445d37832876fe2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac00126ab409dbc1a5445d37832876fe2">&#9670;&nbsp;</a></span>has_bases()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename TypeDescriptor &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">constexpr auto refl::descriptor::has_bases </td>
          <td>(</td>
          <td class="paramtype">TypeDescriptor&#160;</td>
          <td class="paramname"><em>t</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span><span class="mlabel">noexcept</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Checks if a type has a bases attribute. </p>
<dl class="deprecated"><dt><b><a class="el" href="deprecated.html#_deprecated000001">Deprecated:</a></b></dt><dd>Use has_base_types in combination with reflect_types instead. </dd></dl>
<dl class="section see"><dt>See also</dt><dd>refl::attr::bases </dd>
<dd>
<a class="el" href="namespacerefl_1_1descriptor.html#a725c882cfae058b70d50517fe134a938" title="Returns a list of the type_descriptor&lt;T&gt;s of the base types of the target, as specified by the bases&lt;...">refl::descriptor::get_bases</a></dd></dl>
<div class="fragment"><div class="line">REFL_AUTO(type(Dog, bases&lt;Animal&gt;))</div>
<div class="line"><a class="code" href="namespacerefl_1_1descriptor.html#ac00126ab409dbc1a5445d37832876fe2">has_bases</a>(reflect&lt;Dog&gt;()) -&gt; <span class="keyword">true</span></div>
</div><!-- fragment --> 
</div>
</div>
<a id="ac9505e8a9ccb0bf419927d27f3ff20f3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac9505e8a9ccb0bf419927d27f3ff20f3">&#9670;&nbsp;</a></span>has_reader()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename WritableMember &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">constexpr auto refl::descriptor::has_reader </td>
          <td>(</td>
          <td class="paramtype">WritableMember&#160;</td>
          <td class="paramname"><em>member</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Checks if there exists a member that has the same display name as the one provied and is readable. </p>
<p>For setter methods with a property attribute, the return value will be true if there exists a reflected getter method with a property with the same display name (property name normalization applies automatically). For fields, returns true. </p>

</div>
</div>
<a id="a435c850ae43e86f333a9c19b0f24580c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a435c850ae43e86f333a9c19b0f24580c">&#9670;&nbsp;</a></span>has_writer()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename ReadableMember &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">constexpr auto refl::descriptor::has_writer </td>
          <td>(</td>
          <td class="paramtype">ReadableMember&#160;</td>
          <td class="paramname"><em>member</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Checks if there exists a member that has the same display name as the one provied and is writable. </p>
<p>For getter methods with a property attribute, the return value will be true if there exists a reflected setter method with a property with the same display name (property name normalization applies automatically). For fields, returns true only if the field is writable. </p>

</div>
</div>
<a id="ab17264f6fe5ef2e6f10a67304cb40e83"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab17264f6fe5ef2e6f10a67304cb40e83">&#9670;&nbsp;</a></span>invoke()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename MemberDescriptor , typename... Args&gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">constexpr auto refl::descriptor::invoke </td>
          <td>(</td>
          <td class="paramtype">MemberDescriptor&#160;</td>
          <td class="paramname"><em>d</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Args &amp;&amp;...&#160;</td>
          <td class="paramname"><em>args</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td> -&gt; decltype(d(std::forward&lt;Args&gt;(args)...))
        </td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span><span class="mlabel">noexcept</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Invokes the member with the specified arguments. </p>
<div class="fragment"><div class="line"><span class="keyword">struct </span>Foo {</div>
<div class="line">  <span class="keywordtype">int</span> bar = 1;</div>
<div class="line">  <span class="keyword">static</span> <span class="keywordtype">int</span> baz = 5;</div>
<div class="line">  <span class="keywordtype">void</span> foobar(<span class="keywordtype">int</span> x) { <span class="keywordflow">return</span> x * 2; }</div>
<div class="line">  <span class="keyword">static</span> <span class="keywordtype">void</span> foobaz(<span class="keywordtype">int</span> x) { <span class="keywordflow">return</span> x * 3; }</div>
<div class="line">};</div>
<div class="line">REFL_AUTO(type(Foo), field(bar), field(baz), func(foobar), func(foobaz))</div>
<div class="line"><a class="code" href="namespacerefl_1_1descriptor.html#ab17264f6fe5ef2e6f10a67304cb40e83">invoke</a>(<a class="code" href="namespacerefl_1_1trait.html#a90fc62b3597ebdeda8040ff78c0628c3">get_t</a>&lt;0, member_list&lt;Foo&gt;(), Foo()) -&gt; 1 (Foo().bar)</div>
<div class="line"><a class="code" href="namespacerefl_1_1descriptor.html#ab17264f6fe5ef2e6f10a67304cb40e83">invoke</a>(<a class="code" href="namespacerefl_1_1trait.html#a90fc62b3597ebdeda8040ff78c0628c3">get_t</a>&lt;1, member_list&lt;Foo&gt;&gt;()) -&gt; 5 (Foo::baz)</div>
<div class="line"><a class="code" href="namespacerefl_1_1descriptor.html#ab17264f6fe5ef2e6f10a67304cb40e83">invoke</a>(<a class="code" href="namespacerefl_1_1trait.html#a90fc62b3597ebdeda8040ff78c0628c3">get_t</a>&lt;2, member_list&lt;Foo&gt;(), Foo(), 10) -&gt; 20 (Foo().foobar())</div>
<div class="line"><a class="code" href="namespacerefl_1_1descriptor.html#ab17264f6fe5ef2e6f10a67304cb40e83">invoke</a>(<a class="code" href="namespacerefl_1_1trait.html#a90fc62b3597ebdeda8040ff78c0628c3">get_t</a>&lt;3, member_list&lt;Foo&gt;&gt;()) -&gt; 30 (Foo::foobaz())</div>
</div><!-- fragment --> 
</div>
</div>
<a id="a6127ab327b1e8f31062e9d0e2440a757"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6127ab327b1e8f31062e9d0e2440a757">&#9670;&nbsp;</a></span>is_const()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename FieldDescriptor &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">constexpr auto refl::descriptor::is_const </td>
          <td>(</td>
          <td class="paramtype">FieldDescriptor&#160;</td>
          <td class="paramname"><em>d</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span><span class="mlabel">noexcept</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Checks whether the value type of the field is const-qualified. </p>
<div class="fragment"><div class="line"><span class="keyword">struct </span>Foo {</div>
<div class="line">  <span class="keywordtype">int</span> bar;</div>
<div class="line">  <span class="keyword">const</span> <span class="keywordtype">int</span> baz;</div>
<div class="line">};</div>
<div class="line">REFL_AUTO(type(Foo), field(bar), field(baz))</div>
<div class="line"><a class="code" href="namespacerefl_1_1descriptor.html#a6127ab327b1e8f31062e9d0e2440a757">is_const</a>(<a class="code" href="namespacerefl_1_1trait.html#a90fc62b3597ebdeda8040ff78c0628c3">get_t</a>&lt;0, member_list&lt;Foo&gt;&gt;()) -&gt; <span class="keyword">false</span></div>
<div class="line"><a class="code" href="namespacerefl_1_1descriptor.html#a6127ab327b1e8f31062e9d0e2440a757">is_const</a>(<a class="code" href="namespacerefl_1_1trait.html#a90fc62b3597ebdeda8040ff78c0628c3">get_t</a>&lt;1, member_list&lt;Foo&gt;&gt;()) -&gt; <span class="keyword">true</span></div>
</div><!-- fragment --> 
</div>
</div>
<a id="a1454a5c8702f245ceafaa9731026f7fe"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1454a5c8702f245ceafaa9731026f7fe">&#9670;&nbsp;</a></span>is_field()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Descriptor &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">constexpr bool refl::descriptor::is_field </td>
          <td>(</td>
          <td class="paramtype">Descriptor&#160;</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span><span class="mlabel">noexcept</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Checks whether T is a field descriptor. </p>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="classrefl_1_1descriptor_1_1field__descriptor.html" title="Represents a reflected field.">refl::descriptor::field_descriptor</a></dd></dl>
<div class="fragment"><div class="line">REFL_AUTO(type(Foo), func(bar), field(baz))</div>
<div class="line"><a class="code" href="namespacerefl_1_1descriptor.html#a76608e349f1f11d8e7eb5ccb759806a6">is_function</a>(<a class="code" href="namespacerefl_1_1trait.html#a90fc62b3597ebdeda8040ff78c0628c3">get_t</a>&lt;0, member_list&lt;Foo&gt;&gt;()) -&gt; <span class="keyword">false</span></div>
<div class="line"><a class="code" href="namespacerefl_1_1descriptor.html#a76608e349f1f11d8e7eb5ccb759806a6">is_function</a>(<a class="code" href="namespacerefl_1_1trait.html#a90fc62b3597ebdeda8040ff78c0628c3">get_t</a>&lt;1, member_list&lt;Foo&gt;&gt;()) -&gt; <span class="keyword">true</span></div>
</div><!-- fragment --> 
</div>
</div>
<a id="a76608e349f1f11d8e7eb5ccb759806a6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a76608e349f1f11d8e7eb5ccb759806a6">&#9670;&nbsp;</a></span>is_function()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Descriptor &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">constexpr bool refl::descriptor::is_function </td>
          <td>(</td>
          <td class="paramtype">Descriptor&#160;</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span><span class="mlabel">noexcept</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Checks whether T is a function descriptor. </p>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="classrefl_1_1descriptor_1_1function__descriptor.html" title="Represents a reflected function.">refl::descriptor::function_descriptor</a></dd></dl>
<div class="fragment"><div class="line">REFL_AUTO(type(Foo), func(bar), field(baz))</div>
<div class="line"><a class="code" href="namespacerefl_1_1descriptor.html#a76608e349f1f11d8e7eb5ccb759806a6">is_function</a>(<a class="code" href="namespacerefl_1_1trait.html#a90fc62b3597ebdeda8040ff78c0628c3">get_t</a>&lt;0, member_list&lt;Foo&gt;&gt;()) -&gt; <span class="keyword">true</span></div>
<div class="line"><a class="code" href="namespacerefl_1_1descriptor.html#a76608e349f1f11d8e7eb5ccb759806a6">is_function</a>(<a class="code" href="namespacerefl_1_1trait.html#a90fc62b3597ebdeda8040ff78c0628c3">get_t</a>&lt;1, member_list&lt;Foo&gt;&gt;()) -&gt; <span class="keyword">false</span></div>
</div><!-- fragment --> 
</div>
</div>
<a id="a288a833843be97b2d80b51b1de886f99"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a288a833843be97b2d80b51b1de886f99">&#9670;&nbsp;</a></span>is_property()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename MemberDescriptor &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">constexpr bool refl::descriptor::is_property </td>
          <td>(</td>
          <td class="paramtype">MemberDescriptor&#160;</td>
          <td class="paramname"><em>d</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span><span class="mlabel">noexcept</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Checks whether T is a member descriptor marked with the property attribute. </p>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="structrefl_1_1attr_1_1property.html" title="Used to decorate a function that serves as a property.">refl::attr::property</a> </dd>
<dd>
<a class="el" href="namespacerefl_1_1descriptor.html#aadb1bb89c2469071ced6551ca3b9b8fd" title="Gets the property attribute.">refl::descriptor::get_property</a></dd></dl>
<div class="fragment"><div class="line">REFL_AUTO(type(User), func(<a class="code" href="namespacerefl_1_1descriptor.html#aff945ef69bf77ab1725a5a8d4c1fea98">get_name</a>, property(<span class="stringliteral">&quot;user_name&quot;</span>)), func(set_name, property()))</div>
<div class="line"><a class="code" href="namespacerefl_1_1descriptor.html#a288a833843be97b2d80b51b1de886f99">is_property</a>(<a class="code" href="namespacerefl_1_1trait.html#a90fc62b3597ebdeda8040ff78c0628c3">get_t</a>&lt;0, <a class="code" href="namespacerefl_1_1descriptor.html#a50b88518840c2acd134a2171795bd7c3">member_list</a>&lt;User&gt;&gt;{}) -&gt; true</div>
</div><!-- fragment --> 
</div>
</div>
<a id="aa68bedab33d684ee5ee4ead24c5586ab"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa68bedab33d684ee5ee4ead24c5586ab">&#9670;&nbsp;</a></span>is_readable()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename MemberDescriptor &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">constexpr bool refl::descriptor::is_readable </td>
          <td>(</td>
          <td class="paramtype">MemberDescriptor&#160;</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span><span class="mlabel">noexcept</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Checks if T is a 0-arg const-qualified member function with a property attribute or a field. </p>
<div class="fragment"><div class="line">REFL_AUTO(type(User), func(<a class="code" href="namespacerefl_1_1descriptor.html#aff945ef69bf77ab1725a5a8d4c1fea98">get_name</a>, property()), func(set_name, property()))</div>
<div class="line"><a class="code" href="namespacerefl_1_1descriptor.html#aa68bedab33d684ee5ee4ead24c5586ab">is_readable</a>(<a class="code" href="namespacerefl_1_1trait.html#a90fc62b3597ebdeda8040ff78c0628c3">get_t</a>&lt;0, <a class="code" href="namespacerefl_1_1descriptor.html#a50b88518840c2acd134a2171795bd7c3">member_list</a>&lt;User&gt;&gt;{}) -&gt; <span class="keyword">true</span></div>
<div class="line"><a class="code" href="namespacerefl_1_1descriptor.html#aa68bedab33d684ee5ee4ead24c5586ab">is_readable</a>(<a class="code" href="namespacerefl_1_1trait.html#a90fc62b3597ebdeda8040ff78c0628c3">get_t</a>&lt;1, member_list&lt;User&gt;&gt;{}) -&gt; false</div>
</div><!-- fragment --> 
</div>
</div>
<a id="a8d2afa6e939c641de9a9f184388341da"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8d2afa6e939c641de9a9f184388341da">&#9670;&nbsp;</a></span>is_resolved()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename FunctionDescriptor &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">constexpr auto refl::descriptor::is_resolved </td>
          <td>(</td>
          <td class="paramtype">FunctionDescriptor&#160;</td>
          <td class="paramname"><em>d</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span><span class="mlabel">noexcept</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Checks whether the function pointer was automatically resolved. </p>
<div class="fragment"><div class="line"><span class="keyword">struct </span>Foo {</div>
<div class="line">  <span class="keywordtype">void</span> bar();</div>
<div class="line">  <span class="keywordtype">void</span> bar(<span class="keywordtype">int</span>);</div>
<div class="line">  <span class="keywordtype">void</span> baz();</div>
<div class="line">};</div>
<div class="line">REFL_AUTO(type(Foo), func(bar), func(baz))</div>
<div class="line"><a class="code" href="namespacerefl_1_1descriptor.html#a8d2afa6e939c641de9a9f184388341da">is_resolved</a>(<a class="code" href="namespacerefl_1_1trait.html#a90fc62b3597ebdeda8040ff78c0628c3">get_t</a>&lt;0, member_list&lt;Foo&gt;&gt;()) -&gt; <span class="keyword">false</span></div>
<div class="line"><a class="code" href="namespacerefl_1_1descriptor.html#a8d2afa6e939c641de9a9f184388341da">is_resolved</a>(<a class="code" href="namespacerefl_1_1trait.html#a90fc62b3597ebdeda8040ff78c0628c3">get_t</a>&lt;1, member_list&lt;Foo&gt;&gt;()) -&gt; <span class="keyword">true</span></div>
</div><!-- fragment --> 
</div>
</div>
<a id="a19a133a31fb133920609bba17fad68b2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a19a133a31fb133920609bba17fad68b2">&#9670;&nbsp;</a></span>is_static()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename FieldDescriptor &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">constexpr auto refl::descriptor::is_static </td>
          <td>(</td>
          <td class="paramtype">FieldDescriptor&#160;</td>
          <td class="paramname"><em>d</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span><span class="mlabel">noexcept</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Checks whether the field is declared as static. </p>
<div class="fragment"><div class="line"><span class="keyword">struct </span>Foo {</div>
<div class="line">  <span class="keywordtype">int</span> bar;</div>
<div class="line">  <span class="keyword">static</span> <span class="keywordtype">int</span> baz;</div>
<div class="line">};</div>
<div class="line">REFL_AUTO(type(Foo), field(bar), field(baz))</div>
<div class="line"><a class="code" href="namespacerefl_1_1descriptor.html#a19a133a31fb133920609bba17fad68b2">is_static</a>(<a class="code" href="namespacerefl_1_1trait.html#a90fc62b3597ebdeda8040ff78c0628c3">get_t</a>&lt;0, member_list&lt;Foo&gt;&gt;()) -&gt; <span class="keyword">false</span></div>
<div class="line"><a class="code" href="namespacerefl_1_1descriptor.html#a19a133a31fb133920609bba17fad68b2">is_static</a>(<a class="code" href="namespacerefl_1_1trait.html#a90fc62b3597ebdeda8040ff78c0628c3">get_t</a>&lt;1, member_list&lt;Foo&gt;&gt;()) -&gt; <span class="keyword">true</span></div>
</div><!-- fragment --> 
</div>
</div>
<a id="abe2665e32dba32044036fa66303c12aa"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abe2665e32dba32044036fa66303c12aa">&#9670;&nbsp;</a></span>is_type()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Descriptor &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">constexpr bool refl::descriptor::is_type </td>
          <td>(</td>
          <td class="paramtype">Descriptor&#160;</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span><span class="mlabel">noexcept</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Checks whether T is a type descriptor. </p>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="classrefl_1_1descriptor_1_1type__descriptor.html" title="Represents a reflected type.">refl::descriptor::type_descriptor</a></dd></dl>
<div class="fragment"><div class="line">REFL_AUTO(type(Foo))</div>
<div class="line"><a class="code" href="namespacerefl_1_1descriptor.html#abe2665e32dba32044036fa66303c12aa">is_type</a>(reflect&lt;Foo&gt;&gt;()) -&gt; <span class="keyword">true</span></div>
</div><!-- fragment --> 
</div>
</div>
<a id="a925e8cb99d6199fe03edeb5109958f8d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a925e8cb99d6199fe03edeb5109958f8d">&#9670;&nbsp;</a></span>is_writable()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename MemberDescriptor &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">constexpr bool refl::descriptor::is_writable </td>
          <td>(</td>
          <td class="paramtype">MemberDescriptor&#160;</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span><span class="mlabel">noexcept</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Checks if T is a 1-arg non-const-qualified member function with a property attribute or a non-const field. </p>
<div class="fragment"><div class="line"><span class="keyword">struct </span>User { std::string <a class="code" href="namespacerefl_1_1descriptor.html#aff945ef69bf77ab1725a5a8d4c1fea98">get_name</a>() <span class="keyword">const</span>; }</div>
<div class="line">REFL_AUTO(type(User), func(<a class="code" href="namespacerefl_1_1descriptor.html#aff945ef69bf77ab1725a5a8d4c1fea98">get_name</a>, property()), func(set_name, property()))</div>
<div class="line"><a class="code" href="namespacerefl_1_1descriptor.html#a925e8cb99d6199fe03edeb5109958f8d">is_writable</a>(<a class="code" href="namespacerefl_1_1trait.html#a90fc62b3597ebdeda8040ff78c0628c3">get_t</a>&lt;0, <a class="code" href="namespacerefl_1_1descriptor.html#a50b88518840c2acd134a2171795bd7c3">member_list</a>&lt;User&gt;&gt;{}) -&gt; <span class="keyword">false</span></div>
<div class="line"><a class="code" href="namespacerefl_1_1descriptor.html#a925e8cb99d6199fe03edeb5109958f8d">is_writable</a>(<a class="code" href="namespacerefl_1_1trait.html#a90fc62b3597ebdeda8040ff78c0628c3">get_t</a>&lt;1, member_list&lt;User&gt;&gt;{}) -&gt; true</div>
</div><!-- fragment --> 
</div>
</div>
<a id="a1a0a7b34d1892fffb8355aaeff29c750"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1a0a7b34d1892fffb8355aaeff29c750">&#9670;&nbsp;</a></span>resolve()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Pointer , typename FunctionDescriptor &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">constexpr auto refl::descriptor::resolve </td>
          <td>(</td>
          <td class="paramtype">FunctionDescriptor&#160;</td>
          <td class="paramname"><em>d</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">constexpr</span><span class="mlabel">noexcept</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Resolves the function pointer as a pointer of the specified type. </p>
<div class="fragment"><div class="line"><span class="keyword">struct </span>Foo {</div>
<div class="line">  <span class="keywordtype">void</span> bar();</div>
<div class="line">  <span class="keywordtype">void</span> bar(<span class="keywordtype">int</span>);</div>
<div class="line">};</div>
<div class="line">REFL_AUTO(type(Foo), func(bar))</div>
<div class="line">resolve&lt;void(Foo::*)()&gt;(<a class="code" href="namespacerefl_1_1trait.html#a90fc62b3597ebdeda8040ff78c0628c3">get_t</a>&lt;0, member_list&lt;Foo&gt;&gt;()) -&gt; &lt;&amp;Foo::bar()&gt;</div>
<div class="line">resolve&lt;void(Foo::*)(int)&gt;(<a class="code" href="namespacerefl_1_1trait.html#a90fc62b3597ebdeda8040ff78c0628c3">get_t</a>&lt;0, member_list&lt;Foo&gt;&gt;()) -&gt; &lt;&amp;Foo::bar(<span class="keywordtype">int</span>)&gt;</div>
<div class="line">resolve&lt;void(Foo::*)(std::string)&gt;(<a class="code" href="namespacerefl_1_1trait.html#a90fc62b3597ebdeda8040ff78c0628c3">get_t</a>&lt;0, member_list&lt;Foo&gt;&gt;()) -&gt; <span class="keyword">nullptr</span></div>
</div><!-- fragment --> 
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<div class="ttc" id="anamespacerefl_1_1descriptor_html_af888ff528516ddbb240168f59e2427e4"><div class="ttname"><a href="namespacerefl_1_1descriptor.html#af888ff528516ddbb240168f59e2427e4">refl::descriptor::get_debug_name</a></div><div class="ttdeci">const char * get_debug_name(MemberDescriptor d)</div><div class="ttdoc">Returns the debug name of T.</div><div class="ttdef"><b>Definition:</b> refl.hpp:3193</div></div>
<div class="ttc" id="anamespacerefl_1_1descriptor_html_aa68bedab33d684ee5ee4ead24c5586ab"><div class="ttname"><a href="namespacerefl_1_1descriptor.html#aa68bedab33d684ee5ee4ead24c5586ab">refl::descriptor::is_readable</a></div><div class="ttdeci">constexpr bool is_readable(MemberDescriptor) noexcept</div><div class="ttdoc">Checks if T is a 0-arg const-qualified member function with a property attribute or a field.</div><div class="ttdef"><b>Definition:</b> refl.hpp:3055</div></div>
<div class="ttc" id="anamespacerefl_1_1descriptor_html_ab17264f6fe5ef2e6f10a67304cb40e83"><div class="ttname"><a href="namespacerefl_1_1descriptor.html#ab17264f6fe5ef2e6f10a67304cb40e83">refl::descriptor::invoke</a></div><div class="ttdeci">constexpr auto invoke(MemberDescriptor d, Args &amp;&amp;... args) noexcept -&gt; decltype(d(std::forward&lt; Args &gt;(args)...))</div><div class="ttdoc">Invokes the member with the specified arguments.</div><div class="ttdef"><b>Definition:</b> refl.hpp:2771</div></div>
<div class="ttc" id="anamespacerefl_1_1descriptor_html_a268faca3e6a1845928f583abe5ef877e"><div class="ttname"><a href="namespacerefl_1_1descriptor.html#a268faca3e6a1845928f583abe5ef877e">refl::descriptor::get_attributes</a></div><div class="ttdeci">constexpr const auto &amp; get_attributes(Descriptor d) noexcept</div><div class="ttdoc">Returns a const reference to the descriptor's attribute tuple.</div><div class="ttdef"><b>Definition:</b> refl.hpp:2599</div></div>
<div class="ttc" id="anamespacerefl_1_1descriptor_html_a19a133a31fb133920609bba17fad68b2"><div class="ttname"><a href="namespacerefl_1_1descriptor.html#a19a133a31fb133920609bba17fad68b2">refl::descriptor::is_static</a></div><div class="ttdeci">constexpr auto is_static(FieldDescriptor d) noexcept</div><div class="ttdoc">Checks whether the field is declared as static.</div><div class="ttdef"><b>Definition:</b> refl.hpp:2790</div></div>
<div class="ttc" id="anamespacerefl_1_1descriptor_html_a58bf4f2ac8fe5f09cb185a9e16ade53c"><div class="ttname"><a href="namespacerefl_1_1descriptor.html#a58bf4f2ac8fe5f09cb185a9e16ade53c">refl::descriptor::get_attribute</a></div><div class="ttdeci">constexpr const A &amp; get_attribute(Descriptor d) noexcept</div><div class="ttdoc">Returns the value of the attribute A on T.</div><div class="ttdef"><b>Definition:</b> refl.hpp:2979</div></div>
<div class="ttc" id="anamespacerefl_1_1descriptor_html_a725c882cfae058b70d50517fe134a938"><div class="ttname"><a href="namespacerefl_1_1descriptor.html#a725c882cfae058b70d50517fe134a938">refl::descriptor::get_bases</a></div><div class="ttdeci">constexpr auto get_bases(TypeDescriptor t) noexcept</div><div class="ttdoc">Returns a list of the type_descriptor&lt;T&gt;s of the base types of the target, as specified by the bases&lt;...</div><div class="ttdef"><b>Definition:</b> refl.hpp:3139</div></div>
<div class="ttc" id="anamespacerefl_1_1descriptor_html_a925e8cb99d6199fe03edeb5109958f8d"><div class="ttname"><a href="namespacerefl_1_1descriptor.html#a925e8cb99d6199fe03edeb5109958f8d">refl::descriptor::is_writable</a></div><div class="ttdeci">constexpr bool is_writable(MemberDescriptor) noexcept</div><div class="ttdoc">Checks if T is a 1-arg non-const-qualified member function with a property attribute or a non-const f...</div><div class="ttdef"><b>Definition:</b> refl.hpp:3083</div></div>
<div class="ttc" id="anamespacerefl_1_1descriptor_html_af716224744f34050b6b43a95251f750c"><div class="ttname"><a href="namespacerefl_1_1descriptor.html#af716224744f34050b6b43a95251f750c">refl::descriptor::get_declared_members</a></div><div class="ttdeci">constexpr auto get_declared_members(TypeDescriptor t) noexcept</div><div class="ttdoc">Returns a type_list of the declared members of the type.</div><div class="ttdef"><b>Definition:</b> refl.hpp:2683</div></div>
<div class="ttc" id="anamespacerefl_1_1descriptor_html_a8d2afa6e939c641de9a9f184388341da"><div class="ttname"><a href="namespacerefl_1_1descriptor.html#a8d2afa6e939c641de9a9f184388341da">refl::descriptor::is_resolved</a></div><div class="ttdeci">constexpr auto is_resolved(FunctionDescriptor d) noexcept</div><div class="ttdoc">Checks whether the function pointer was automatically resolved.</div><div class="ttdef"><b>Definition:</b> refl.hpp:2838</div></div>
<div class="ttc" id="anamespacerefl_1_1descriptor_html_a84ed2ffb6772717a47f526da332c45c8"><div class="ttname"><a href="namespacerefl_1_1descriptor.html#a84ed2ffb6772717a47f526da332c45c8">refl::descriptor::get_attribute_types</a></div><div class="ttdeci">constexpr auto get_attribute_types(Descriptor d) noexcept</div><div class="ttdoc">Returns a type_list of the descriptor's attribute types.</div><div class="ttdef"><b>Definition:</b> refl.hpp:2616</div></div>
<div class="ttc" id="anamespacerefl_1_1descriptor_html_a75e6a5698114443414d43d3b4ae1c50c"><div class="ttname"><a href="namespacerefl_1_1descriptor.html#a75e6a5698114443414d43d3b4ae1c50c">refl::descriptor::get_pointer</a></div><div class="ttdeci">constexpr auto get_pointer(MemberDescriptor d) noexcept</div><div class="ttdoc">Returns a pointer to the reflected field/function.</div><div class="ttdef"><b>Definition:</b> refl.hpp:2747</div></div>
<div class="ttc" id="anamespacerefl_1_1descriptor_html_aa18162a39182126fc2345f2fe3e5b058"><div class="ttname"><a href="namespacerefl_1_1descriptor.html#aa18162a39182126fc2345f2fe3e5b058">refl::descriptor::get_debug_name_const</a></div><div class="ttdeci">constexpr auto get_debug_name_const(MemberDescriptor d)</div><div class="ttdoc">Returns the debug name of T (In the form of 'declaring_type::member_name') as a const_string.</div><div class="ttdef"><b>Definition:</b> refl.hpp:3179</div></div>
<div class="ttc" id="anamespacerefl_1_1descriptor_html_ad60741d56b2c28157b3588b7348256b7"><div class="ttname"><a href="namespacerefl_1_1descriptor.html#ad60741d56b2c28157b3588b7348256b7">refl::descriptor::get_members</a></div><div class="ttdeci">constexpr auto get_members(TypeDescriptor t) noexcept</div><div class="ttdoc">Returns a type_list of the declared and inherited members of the type.</div><div class="ttdef"><b>Definition:</b> refl.hpp:2704</div></div>
<div class="ttc" id="anamespacerefl_1_1trait_html_a90fc62b3597ebdeda8040ff78c0628c3"><div class="ttname"><a href="namespacerefl_1_1trait.html#a90fc62b3597ebdeda8040ff78c0628c3">refl::trait::get_t</a></div><div class="ttdeci">typename get&lt; N, TypeList &gt;::type get_t</div><div class="ttdoc">The N-th type in the provided type_list.</div><div class="ttdef"><b>Definition:</b> refl.hpp:760</div></div>
<div class="ttc" id="anamespacerefl_1_1descriptor_html_abe2665e32dba32044036fa66303c12aa"><div class="ttname"><a href="namespacerefl_1_1descriptor.html#abe2665e32dba32044036fa66303c12aa">refl::descriptor::is_type</a></div><div class="ttdeci">constexpr bool is_type(Descriptor) noexcept</div><div class="ttdoc">Checks whether T is a type descriptor.</div><div class="ttdef"><b>Definition:</b> refl.hpp:2934</div></div>
<div class="ttc" id="anamespacerefl_1_1descriptor_html_afc445cfd9be739891c2b6731047cf144"><div class="ttname"><a href="namespacerefl_1_1descriptor.html#afc445cfd9be739891c2b6731047cf144">refl::descriptor::get_base_types</a></div><div class="ttdeci">constexpr auto get_base_types(TypeDescriptor t) noexcept</div><div class="ttdoc">Returns a type_list of the declared and inherited base types of the type.</div><div class="ttdef"><b>Definition:</b> refl.hpp:2662</div></div>
<div class="ttc" id="anamespacerefl_1_1descriptor_html_ac00126ab409dbc1a5445d37832876fe2"><div class="ttname"><a href="namespacerefl_1_1descriptor.html#ac00126ab409dbc1a5445d37832876fe2">refl::descriptor::has_bases</a></div><div class="ttdeci">constexpr auto has_bases(TypeDescriptor t) noexcept</div><div class="ttdoc">Checks if a type has a bases attribute.</div><div class="ttdef"><b>Definition:</b> refl.hpp:3119</div></div>
<div class="ttc" id="anamespacerefl_1_1descriptor_html_a50b88518840c2acd134a2171795bd7c3"><div class="ttname"><a href="namespacerefl_1_1descriptor.html#a50b88518840c2acd134a2171795bd7c3">refl::descriptor::member_list</a></div><div class="ttdeci">typename detail::member_list&lt; T &gt;::type member_list</div><div class="ttdoc">A type_list of the declared and inherited member descriptors of the target type T.</div><div class="ttdef"><b>Definition:</b> refl.hpp:2263</div></div>
<div class="ttc" id="anamespacerefl_html_ae95fbc2d63a7db5ce4d8a4dcca3d637e"><div class="ttname"><a href="namespacerefl.html#ae95fbc2d63a7db5ce4d8a4dcca3d637e">refl::reflect</a></div><div class="ttdeci">constexpr type_descriptor&lt; T &gt; reflect() noexcept</div><div class="ttdoc">Returns the type descriptor for the type T.</div><div class="ttdef"><b>Definition:</b> refl.hpp:3431</div></div>
<div class="ttc" id="anamespacerefl_1_1descriptor_html_a76608e349f1f11d8e7eb5ccb759806a6"><div class="ttname"><a href="namespacerefl_1_1descriptor.html#a76608e349f1f11d8e7eb5ccb759806a6">refl::descriptor::is_function</a></div><div class="ttdeci">constexpr bool is_function(Descriptor) noexcept</div><div class="ttdoc">Checks whether T is a function descriptor.</div><div class="ttdef"><b>Definition:</b> refl.hpp:2917</div></div>
<div class="ttc" id="anamespacestd_html"><div class="ttname"><a href="namespacestd.html">std</a></div><div class="ttdef"><b>Definition:</b> refl.hpp:37</div></div>
<div class="ttc" id="anamespacerefl_1_1descriptor_html_a288a833843be97b2d80b51b1de886f99"><div class="ttname"><a href="namespacerefl_1_1descriptor.html#a288a833843be97b2d80b51b1de886f99">refl::descriptor::is_property</a></div><div class="ttdeci">constexpr bool is_property(MemberDescriptor d) noexcept</div><div class="ttdoc">Checks whether T is a member descriptor marked with the property attribute.</div><div class="ttdef"><b>Definition:</b> refl.hpp:3012</div></div>
<div class="ttc" id="anamespacerefl_1_1descriptor_html_a9f021ce9c4ef95ab4313aefb8f4f3588"><div class="ttname"><a href="namespacerefl_1_1descriptor.html#a9f021ce9c4ef95ab4313aefb8f4f3588">refl::descriptor::get_display_name</a></div><div class="ttdeci">const char * get_display_name(Descriptor d) noexcept</div><div class="ttdoc">Returns the display name of T.</div><div class="ttdef"><b>Definition:</b> refl.hpp:3306</div></div>
<div class="ttc" id="anamespacerefl_1_1descriptor_html_a024d98e2fa7e18a1d7ece243549cde68"><div class="ttname"><a href="namespacerefl_1_1descriptor.html#a024d98e2fa7e18a1d7ece243549cde68">refl::descriptor::has_attribute</a></div><div class="ttdeci">constexpr bool has_attribute(Descriptor) noexcept</div><div class="ttdoc">Checks whether T has an attribute of type A.</div><div class="ttdef"><b>Definition:</b> refl.hpp:2949</div></div>
<div class="ttc" id="anamespacerefl_1_1runtime_html_a06e1996b05966eac4f282b6656169d6a"><div class="ttname"><a href="namespacerefl_1_1runtime.html#a06e1996b05966eac4f282b6656169d6a">refl::runtime::debug</a></div><div class="ttdeci">void debug(std::basic_ostream&lt; CharT &gt; &amp;os, const T &amp;value, bool compact=false)</div></div>
<div class="ttc" id="anamespacerefl_1_1descriptor_html_aadb1bb89c2469071ced6551ca3b9b8fd"><div class="ttname"><a href="namespacerefl_1_1descriptor.html#aadb1bb89c2469071ced6551ca3b9b8fd">refl::descriptor::get_property</a></div><div class="ttdeci">constexpr attr::property get_property(FunctionDescriptor d) noexcept</div><div class="ttdoc">Gets the property attribute.</div><div class="ttdef"><b>Definition:</b> refl.hpp:3030</div></div>
<div class="ttc" id="anamespacerefl_1_1descriptor_html_aff945ef69bf77ab1725a5a8d4c1fea98"><div class="ttname"><a href="namespacerefl_1_1descriptor.html#aff945ef69bf77ab1725a5a8d4c1fea98">refl::descriptor::get_name</a></div><div class="ttdeci">constexpr auto get_name(Descriptor d) noexcept</div><div class="ttdoc">Returns the full name of the descriptor.</div><div class="ttdef"><b>Definition:</b> refl.hpp:2582</div></div>
<div class="ttc" id="anamespacerefl_1_1descriptor_html_a5621e8b981bfb910f027fb720320f977"><div class="ttname"><a href="namespacerefl_1_1descriptor.html#a5621e8b981bfb910f027fb720320f977">refl::descriptor::get_simple_name</a></div><div class="ttdeci">constexpr auto get_simple_name(TypeDescriptor t)</div><div class="ttdoc">Returns the unqualified name of the type, discarding the namespace and typenames (if a template type)...</div><div class="ttdef"><b>Definition:</b> refl.hpp:3157</div></div>
<div class="ttc" id="anamespacerefl_1_1descriptor_html_a6127ab327b1e8f31062e9d0e2440a757"><div class="ttname"><a href="namespacerefl_1_1descriptor.html#a6127ab327b1e8f31062e9d0e2440a757">refl::descriptor::is_const</a></div><div class="ttdeci">constexpr auto is_const(FieldDescriptor d) noexcept</div><div class="ttdoc">Checks whether the value type of the field is const-qualified.</div><div class="ttdef"><b>Definition:</b> refl.hpp:2810</div></div>
<div class="ttc" id="anamespacerefl_1_1descriptor_html_afe87e9035c9416033b3514aa094bc0fd"><div class="ttname"><a href="namespacerefl_1_1descriptor.html#afe87e9035c9416033b3514aa094bc0fd">refl::descriptor::get_declarator</a></div><div class="ttdeci">constexpr auto get_declarator(MemberDescriptor d) noexcept</div><div class="ttdoc">Returns the type_descriptor of declaring type of the member.</div><div class="ttdef"><b>Definition:</b> refl.hpp:2722</div></div>
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="navelem"><a class="el" href="namespacerefl.html">refl</a></li><li class="navelem"><a class="el" href="namespacerefl_1_1descriptor.html">descriptor</a></li>
    <li class="footer">Generated by
    <a href="http://www.doxygen.org/index.html">
    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.17 </li>
  </ul>
</div>
</body>
</html>
